Я использую 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, который сообщает, что на самом деле не удалось:
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?
Ответы:
Вы можете установить переменную среды
CTEST_OUTPUT_ON_FAILURE
, которая будет показывать вам любые выходные данные тестовой программы всякий раз, когда тест не проходит. Один из способов сделать это при использовании Makefiles и командной строки будет следующим:Этот вопрос и ответ о переполнении стека показывает, как установить переменные среды в Visual Studio.
источник
SET(CTEST_OUTPUT_ON_FAILURE TRUE)
иSET(CTEST_OUTPUT_ON_FAILURE ON)
, но безрезультатно. Другие сообщения в сети подтверждают, что это не работает.set(CTEST_OUTPUT_ON_FAILURE TRUE)
не устанавливает переменную среды . Попробуйте это в командной строке:CTEST_OUTPUT_ON_FAILURE=TRUE make test
.make CTEST_OUTPUT_ON_FAILURE=1 test
короче и милее ИМО.Вы можете позвонить
ctest
напрямую, после создания проекта.источник
Вы можете проверить
Testing/Temporary
подпапку. Он создается автоматически после запуска make test. Эта папка содержит два файла:LastTest.log
иLastTestsFailed.log
.LastTest.log
содержит желаемый результат для выполнения тестов.LastTestFailed.log
содержит названия неудачных тестов. Таким образом, вы можете проверить их вручную после выполненияmake test
.Второй способ - заставить ctest показать вам содержимое файлов журнала после запуска тестов:
поместите в директорию сборки (из которой вы запускаете
make test
) файл CTestCustom.ctest (вы можете сделать это, например, с помощью команды configure file ) со следующим содержимымCTEST_CUSTOM_POST_TEST («проверка кота / временный / LastTest.log»)
Вместо cat вы можете использовать любую команду Windows cmd, которая выполняет аналогичные действия.
make test
снова беги и получай прибыль!дополнительную информацию о настройке ctest вы можете найти здесь . Просто перейдите в раздел «Настройка cmake». Удачи!
источник
Пришлось самому добавить «контрольную» цель. "make tests" по какой-то причине ничего не делает. Итак, что я сделал (как было предложено где-то в stackoverflow) - я добавил эту цель вручную. Чтобы получить подробный вывод, я просто написал это так:
источник
Есть очень простое решение (которое по каким-то причинам сложно найти через поиск Google):
Если вы используете CMake с функцией открытия папки Visual Studio, вы можете добавить
настройку вашей конфигурации сборки.
источник
make check CTEST_OUTPUT_ON_FAILURE=TRUE
источник
Это делает тестовый вывод более подробным:
источник
Мой подход представляет собой комбинацию ответов от оны , из Zbyszek , и от TARC . Я использую
${CMAKE_COMMAND}
переменную (для которой задан абсолютный путь к запускаемому исполняемому файлу cmake) с-E env CTEST_OUTPUT_ON_FAILURE=1
аргументом для вызова фактической команды ctest с использованием${CMAKE_CTEST_COMMAND} -C $<CONFIG>
. Чтобы прояснить, что происходит, я начинаю с трехcmake -E echo
команд, чтобы показать текущий рабочий каталог и команду ctest, которую нужно вызвать. Вот как я звонюadd_custom_target
.Это хорошо сочетается с MSVC IDE, где любые ошибки теста отображаются как ошибки компиляции, доступные при нажатии. См. Cmake -E env для документации по
cmake -E
режиму переносимого инструмента командной строки. Я также добавляю зависимость,ALL_BUILD
чтобы все проекты создавались перед вызовомcheck
цели. (В сборках Linux может потребоваться заменаALL_BUILD
наALL
; я еще не тестировал это в Linux.)источник
Для людей, использующих Visual Studio, вот еще один вариант (взлом) по теме:
источник
чтобы показать результат с файлом XML, вы должны выполнить тест с помощью следующей команды
и мы обнаружили результат в Testing / 1234123432 / test.xml, и другие файлы также генерируются в папке Testing.
источник
ctest -VV
илиctest --extra-verbose
Из документации :
источник