Использование cmake как получить подробный вывод из ctest?
Я использую CMake для создания моего проекта. Я добавил двоичный модульный тест, который использует платформу модульного тестирования boost. Этот двоичный файл содержит все модульные тесты. Я добавил, что двоичный файл для запуска CTest:
ADD_EXECUTABLE( tftest test-main.cpp )
ENABLE_TESTING()
ADD_TEST( UnitTests tftest)
но вывод сборки в Visual Studio показывает только результат выполнения ctest:
Start 1: UnitTests
1/1 Test #1: UnitTests ................***Failed 0.05 sec
0% tests passed, 1 tests failed out of 1
Это не очень полезно, потому что я не вижу, что тест не пройден. Если я запускаю ctest вручную из командной строки с --verbose, я получаю вывод из теста boost unit, который рассказывает, что на самом деле не удалось:
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
Итак, что мне нужно изменить в CMakeLists.txt, чтобы ctest работал с --verbose во все времена? Есть ли лучший способ использовать модульные тесты boost с cmake / ctest?
9 ответов:
Вы можете установить переменную окружения
CTEST_OUTPUT_ON_FAILURE
, который покажет вам любой вывод из тестовой программы всякий раз, когда тест терпит неудачу. Один из способов сделать это при использовании Makefiles и командной строки будет следующим:env CTEST_OUTPUT_ON_FAILURE=1 make check
это так вопрос и ответ показывает, как задать переменные среды в Visual Studio.
вы можете проверить
Testing/Temporary
папку. Он автоматически создается после запуска make test. Эта папка содержит два файла:LastTest.log
иLastTestsFailed.log
.LastTest.log
содержит желаемые выходные данные для выполнения тестов.LastTestFailed.log
содержит имена неудачных тестов. Так что вы можете проверить их вручную после выполненияmake test
.второй способ-получить ctest, чтобы показать вам содержимое файлов журнала после запуска тестов:
место в build dir (от которого вы бежите
make test
) файл CTestCustom.ctest (вы можете сделать это с помощью настроить файл команда, например) со следующим содержаниемCTEST_CUSTOM_POST_TEST ("cat Testing / Temporary / LastTest.журнал")
вместо cat вы можете использовать любую команду Windows cmd, которая делает подобные вещи.
- выполнить
make test
снова и сделать выгода!дополнительную информацию о настройке ctest вы можете найти здесь. Просто перейдите в раздел" настройка cmake". Удачи вам!
мне пришлось добавить "проверить" цель самостоятельно. "сделать тесты" почему-то ничего не делает. Так что я сделал (как было предложено где - то на stackoverflow) - я добавил эту цель вручную. Чтобы получить подробный вывод, я просто написал его так:
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} --verbose)
мой подход-это комбинация ответов от ony,от Збышек и от КАТП. Я использую
${CMAKE_COMMAND}
переменная (которая устанавливается в абсолютный путь к вызываемому исполняемому файлу cmake) с-E env CTEST_OUTPUT_ON_FAILURE=1
аргумент для вызова фактической команды ctest с помощью${CMAKE_CTEST_COMMAND} -C $<CONFIG>
. Чтобы помочь прояснить, что происходит, я начинаю с трехcmake -E echo
команды для отображения текущего рабочего каталога и вызываемой команды ctest. Вот как я называюadd_custom_target
.add_custom_target(check ${CMAKE_COMMAND} -E echo CWD=${CMAKE_BINARY_DIR} COMMAND ${CMAKE_COMMAND} -E echo CMD=${CMAKE_CTEST_COMMAND} -C $<CONFIG> COMMAND ${CMAKE_COMMAND} -E echo ---------------------------------- COMMAND ${CMAKE_COMMAND} -E env CTEST_OUTPUT_ON_FAILURE=1 ${CMAKE_CTEST_COMMAND} -C $<CONFIG> WORKING_DIRECTORY ${CMAKE_BINARY_DIR} DEPENDS ALL_BUILD )
это хорошо работает с MSVC IDE, где любые ошибки тестирования отображаются как кликабельные ошибки компиляции. Смотрите cmake-E env для документирования
cmake -E
портативном режиме командной строки. Я также добавляю зависимость отALL_BUILD
так что все проекты будут построены перед вызовомcheck
цель. (В Linux-сборках может потребоваться заменитьALL_BUILD
СALL
; я еще не тестировал это на Linux.)
есть очень простое решение (которое почему-то трудно найти через google):
ctest --output-on-failure
Если вы используете cmake с функцией open folder visual studio, вы можете добавить
"ctestCommandArgs": "--output-on-failure"
настройка конфигурации сборки.