2017-03-17 2 views
1

J'utilise googletest en conjonction avec gcovr ce qui produit un comportement étrange. J'ai un fichier d'en-tête foo.h que gcovr revendications a certaines lignes qui ne sont pas couvertes par un test. Ces lignes sont la définition de la classe et le constructeur de mouvement:googletest move couverture du constructeur

File Lines Exec Cover Missing 
foo.h 42 40 95% 39,47 

où la ligne 39 est:

class foo 

et la ligne 47 est:

foo(foo&&) = default; 

J'ai essayé d'appeler explicitement cette fonction un corps de test avec std::move(), en vain. Y a-t-il une solution à ce problème, ou suis-je coincé avec un rapport de couverture de 99%?

Je devrais noter, il n'y a aucune implémentation dans cet en-tête en dehors de la définition de classe et de la sémantique de copie/déplacement (qui sont tous définis comme default); tous les corps de fonctions sont dans foo.cpp.

+0

Avez-vous essayé un tel code de test: 'Foo foo1; Foo foo2 (std :: move (foo1)); '? – PiotrNycz

+0

@PiotrNycz Oui, j'ai essayé de l'appeler explicitement dans un cas de test –

Répondre

0

Il semble que la seule façon d'obtenir que ces lignes soient retirées du rapport de couverture comme étant «découvertes» est de les retirer de l'en-tête. Cela n'affecte pas vraiment quoi que ce soit, car ils ne font que copier copy/move/dtor à default. Partout ailleurs où ceux-ci sont effectivement mis en œuvre ou supprimés n'apparaît pas sur le rapport de couverture.