2015-10-09 1 views
4

J'essaie d'ajouter des tests unitaires et des simulacres à un projet hérité. Dans le cadre de cela, j'ai partiellement raillé l'une des classes, se moquant seulement des méthodes dont j'ai besoin dans la classe que je suis en train de tester. Je passe alors ce simulacre pour la classe pour l'injection de dépendance et de le supprimer dans le destructor, mais quand je lance le test, il se plaint:Pourquoi googlemock signale-t-il une fuite fictive quand je peux voir qu'il est supprimé?

ERROR: this mock object (used in test xxxx) should be deleted but never is. Its address is @0000000004208AD0. 
ERROR: 1 leaked mock object found at program exit. 

Lors du débogage dans le code que je peux voir que supprimer est en cours appelé la faux objet dans le destructeur, mais il se plaint encore. Si j'appelle à nouveau supprimer à la fin du test, une exception SEH est générée car j'essaie de supprimer la mémoire qui a déjà été désaffectée, mais si je commente la suppression dans le destructeur, alors cela fonctionne (mais évidemment cause une fuite de mémoire)

Répondre

2

Le problème est que je n'ai pas déclaré le destructeur virtuel, donc dans le code actuel, il appelait le destructeur de classe de base et non mon destructeur maquette. Ceci est probablement évident pour certains selon mon dernier commentaire à ce sujet en travaillant quand j'ai supprimé le faux dans le test, mais il m'a fallu du temps pour le comprendre jusqu'à ce que j'ai trouvé ce lien, alors j'ai pensé partager sur SO aussi http://wahz.blogspot.ca/2014/08/google-mock-dammit-gets-me-every-time.html