Commençons par un exemple de travail minimal:
main.cpp:supprimer le code d'exception généré automatique du rapport de couverture
#include <iostream>
#include <string>
int main() {
std::cout << "hello " + std::to_string(42);
return 0;
}
Je compile ce code en utilisant les drapeaux suivants:
[g++/clang++] -std=c++11 -g -Og --coverage -Wall -o main main.cpp
Clang 4.0.1
gcc 4.8.5.
Je reçois seulement 50% de couverture de code, puisque le compilateur génère du code d'exception, qui n'est pas exécuté, comme expliqué in another stackoverflow question.
Le problème est que la désactivation des exceptions via -fno-exceptions
n'est pas une option pour moi. Le code que j'écris pour les tests unitaires utilise des exceptions, donc la désactivation de tous n'est pas une option.
Afin de générer un rapport j'utilise gcovr
, dans le cas de clang ++ en plus llvm-cov gcov
pour le convertir. Mais je ne suis pas lié à ces outils, donc si vous avez d'autres outils qui ne montrent pas ce comportement, n'hésitez pas à les suggérer!
Fondamentalement, j'ai besoin d'un moyen de compiler/écrire des tests unitaires pour ce code et obtenir une couverture 100% branche/conditionnelle avec des exceptions activées. Y a-t-il un moyen?