151 votes

En utilisant CMake, comment puis-je obtenir la sortie verbose de CTest ?

J'utilise CMake pour construire mon projet. J'ai ajouté un binaire de test unitaire qui utilise le framework de test unitaire Boost. Ce binaire contient tous les tests unitaires. J'ai ajouté ce binaire pour qu'il soit exécuté par CTest :

ADD_EXECUTABLE( tftest test-main.cpp )
ENABLE_TESTING()
ADD_TEST( UnitTests tftest)

Mais la sortie de la compilation dans Visual Studio ne montre que 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 peux pas voir quel test a échoué. Si je lance ctest manuellement à partir de la ligne de commande avec --verbose J'obtiens la sortie d'un test unitaire Boost qui indique ce qui a é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

Donc, que dois-je changer dans le fichier CMakeLists.txt pour que CTest fonctionne avec --verbose à tout moment ? Existe-t-il une meilleure façon d'utiliser les tests unitaires Boost avec CMake/CTest ?

118voto

richq Points 29694

Vous pouvez utiliser le ctest --output-on-failure ou définir la variable d'environnement CTEST_OUTPUT_ON_FAILURE qui vous montrera toute sortie du programme de test lorsque le test échoue. Une façon d'y parvenir en utilisant Makefiles et la ligne de commande serait la suivante :

env CTEST_OUTPUT_ON_FAILURE=1 make check

Cette question et réponse de Stack Overflow montre comment définir des variables d'environnement dans Visual Studio.

60voto

Jamillo Santos Points 189

Vous pouvez appeler ctest directement, après la fabrication et la réalisation de votre projet.

ctest --verbose

35voto

MikeMB Points 5827

Il existe une solution très simple (qui, pour une raison quelconque, est difficile à trouver par le biais de Google Search) :

ctest --output-on-failure

Si vous utilisez CMake avec la fonction d'ouverture de dossier de Visual Studio, vous pouvez ajouter l'option

"ctestCommandArgs": "--output-on-failure"

dans votre configuration de construction.

34voto

beduin Points 2742
  1. 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 y LastTestsFailed.log . LastTest.log contient les résultats souhaités pour les tests d'exécution. LastTestFailed.log contient les noms des tests qui ont échoué. Vous pouvez donc les vérifier manuellement après avoir exécuté make test .

  2. La deuxième méthode consiste à demander à ctest de vous montrer le contenu des fichiers journaux après l'exécution des tests :

    1. place dans répertoire de construction (à partir duquel vous exécutez make test ) dans le fichier CTestCustom.ctest (vous pouvez le faire avec fichier de configuration par exemple) avec le contenu suivant

      CTEST_CUSTOM_POST_TEST("cat Testing/Temporary/LastTest.log")

Au lieu de cat, vous pouvez utiliser n'importe quelle commande Windows cmd qui fait des choses similaires.

  1. courir make test encore une fois et obtenir des bénéfices !

Pour plus d'informations sur la personnalisation de ctest, vous pouvez trouver aquí . Il suffit de passer à la section "Personnalisation de cmake". Bonne chance !

25voto

ony Points 3863

J'ai dû ajouter moi-même la cible "check". L'option "make tests" ne donne rien pour une raison ou pour une autre. Donc ce que j'ai fait (comme suggéré quelque part sur stackoverflow) - j'ai ajouté cette cible manuellement. Pour obtenir une sortie verbeuse, je l'ai simplement écrite comme suit :

add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} --verbose)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X