J'utilise CMake pour construire mon projet. J'ai ajouté un binaire de test unitaire qui utilise le cadre de test unitaire Boost. Ce binaire contient tous les tests unitaires. J'ai ajouté ce binaire à exécuter par CTest:
ADD_EXECUTABLE( tftest test-main.cpp )
ENABLE_TESTING()
ADD_TEST( UnitTests tftest)
Mais la sortie de génération dans Visual Studio affiche uniquement le résultat de l'exécution de CTest:
Start 1: UnitTests
1/1 Test #1: UnitTests ................***Failed 0.05 sec
0% tests passed, 1 tests failed out of 1
Ce n'est pas très utile, car je ne vois pas quel test a échoué. Si j'exécute ctest manuellement à partir de la ligne de commande avec, --verbose
j'obtiens la sortie d'un test unitaire Boost qui indique ce qui a réellement échoué:
1: Test command: tftest.exe
1: Test timeout computed to be: 9.99988e+006
1: Running 4 test cases...
1: test-main.cpp(20): error in "sanity_check3": check 1 == 2 failed
1:
1: *** 1 failure detected in test suite "Master Test Suite"
1/1 Test #1: UnitTests ................***Failed 0.00 sec
Alors, que dois-je changer dans le CMakeLists.txt pour que CTest fonctionne --verbose
à tout moment? Existe-t-il une meilleure façon d'utiliser les tests unitaires Boost avec CMake / CTest?
Réponses:
Vous pouvez définir la variable d'environnement
CTEST_OUTPUT_ON_FAILURE
, qui vous montrera toute sortie du programme de test chaque fois que le test échoue. Une façon de le faire lors de l'utilisation de Makefiles et de la ligne de commande serait la suivante:Cette question et réponse de Stack Overflow montre comment définir des variables d'environnement dans Visual Studio.
la source
SET(CTEST_OUTPUT_ON_FAILURE TRUE)
etSET(CTEST_OUTPUT_ON_FAILURE ON)
, mais cela n'a aucun effet. D'autres rapports sur le Web corroborent que cela est cassé.set(CTEST_OUTPUT_ON_FAILURE TRUE)
ne définit pas de variable d' environnement . Essayez ceci sur la ligne de commande:CTEST_OUTPUT_ON_FAILURE=TRUE make test
.make CTEST_OUTPUT_ON_FAILURE=1 test
est plus court et plus agréable IMO.Vous pouvez appeler
ctest
directement, après la réalisation et la réalisation de votre projet.la source
Vous pouvez vérifier le
Testing/Temporary
sous - dossier. Il est automatiquement créé après l'exécution de make test. Ce dossier contient deux fichiers:LastTest.log
etLastTestsFailed.log
.LastTest.log
contient la sortie souhaitée pour l'exécution des tests.LastTestFailed.log
contient les noms des tests ayant échoué. Vous pouvez donc les vérifier manuellement après leur exécutionmake test
.La deuxième façon est d'obtenir ctest pour vous montrer le contenu des fichiers journaux après l'exécution des tests:
placez dans le répertoire de construction (à partir duquel vous exécutez
make test
) le fichier CTestCustom.ctest (vous pouvez le faire avec la commande configure file , par exemple) avec le contenu suivantCTEST_CUSTOM_POST_TEST ("Test de chat / Temporaire / LastTest.log")
Au lieu de cat, vous pouvez utiliser n'importe quelle commande Windows cmd qui fait des choses similaires.
make test
nouveau et obtenir des bénéfices!des informations supplémentaires sur la personnalisation de ctest sont disponibles ici . Passez simplement à la section "Personnalisation de cmake". Bonne chance!
la source
J'ai dû ajouter moi-même la cible "check". "faire des tests" ne fait rien pour une raison quelconque. Donc ce que j'ai fait (comme cela a été suggéré quelque part sur stackoverflow) - j'ai ajouté cette cible manuellement. Pour obtenir une sortie verbeuse, je viens de l'écrire comme:
la source
Il existe une solution très simple (qui pour une raison quelconque est difficile à trouver via la recherche Google):
Si vous utilisez CMake avec la fonction de dossier ouvert de Visual Studio, vous pouvez ajouter le
réglage de votre configuration de construction.
la source
make check CTEST_OUTPUT_ON_FAILURE=TRUE
la source
Cela rend la sortie du test plus verbeuse:
la source
Mon approche est une combinaison des réponses de ony , de zbyszek et de tarc . J'utilise la
${CMAKE_COMMAND}
variable (qui est définie sur le chemin absolu de l'exécutable cmake appelé) avec l'-E env CTEST_OUTPUT_ON_FAILURE=1
argument pour appeler la commande ctest réelle en utilisant${CMAKE_CTEST_COMMAND} -C $<CONFIG>
. Pour aider à clarifier ce qui se passe, je commence par troiscmake -E echo
commandes pour afficher le répertoire de travail actuel et la commande ctest à invoquer. Voici comment j'appelleadd_custom_target
.Cela fonctionne bien avec l'IDE MSVC où toutes les erreurs de test sont affichées comme des erreurs de compilation cliquables. Voir cmake -E env pour la documentation du
cmake -E
mode d'outil de ligne de commande portable. J'ajoute également une dépendance surALL_BUILD
afin que tous les projets soient construits avant d'appeler lacheck
cible. (Sur les versions Linux, il peut être nécessaire de le remplacerALL_BUILD
parALL
; je n'ai pas encore testé cela sous Linux.)la source
Pour les personnes utilisant Visual Studio, voici une autre variante (hack) sur le thème:
la source
pour afficher le résultat avec un fichier XML, vous devez exécuter le test avec la commande suivante
et nous avons trouvé le résultat dans Testing / 1234123432 / test.xml et d'autres fichiers sont également générés dans le dossier de test
la source
ctest -VV
ouctest --extra-verbose
De la documentation :
la source