Используя cmake, как получить подробный вывод из ctest?

Я использую CMake для создания своего проекта. Я добавил бинарный тест модульного теста, использующий фреймворк для блочного тестирования Этот двоичный файл содержит все модульные тесты. Я добавил этот двоичный файл для запуска 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? Есть ли лучший способ использовать буст-тесты с помощью cmake/ctest?

12 ответов

Решение

Вы можете установить переменную среды CTEST_OUTPUT_ON_FAILURE, который покажет вам любой вывод из тестовой программы, когда тест не пройден. Один из способов сделать это при использовании Makefiles и командной строки:

env CTEST_OUTPUT_ON_FAILURE=1 make check

Этот ТАК вопрос и ответ показывает, как установить переменные среды в Visual Studio.

Вы могли бы позвонить ctest непосредственно, после создания и создания вашего проекта.

ctest --verbose

Существует очень простое решение (которое по некоторым причинам трудно найти через Google):

ctest --output-on-failure

Если вы используете cmake с функцией открытия папки Visual Studio, вы можете добавить

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

установка вашей конфигурации сборки.

  1. Вы можете проверить Testing/Temporary вложенная папка. Он автоматически создается после запуска make test. Эта папка содержит два файла: LastTest.log а также LastTestsFailed.log, LastTest.log содержит желаемый вывод для запуска тестов. LastTestFailed.log содержит имена неудачных тестов. Таким образом, вы можете проверить их вручную после выполнения make test,

  2. Второй способ - заставить ctest показать вам содержимое файлов журнала после выполнения тестов:

    1. место в build dir (из которого вы запускаете make test) файл CTestCustom.ctest (вы можете сделать это, например, командой configure file) со следующим содержимым

      CTEST_CUSTOM_POST_TEST("Тестирование кошки / Временный /LastTest.log")

Вместо cat вы можете использовать любую команду Windows cmd, которая выполняет похожие действия.

  1. бежать make test снова и получай прибыль!

дополнительную информацию о настройке ctest вы можете найти здесь. Просто перейдите в раздел "Настройка cmake". Удачи!

Это делает вывод теста более подробным:

make test ARGS="-V"

Я должен был добавить цель "проверить" самостоятельно. "делать тесты" по какой-то причине ничего не делает. Итак, что я сделал (как было предложено где-то на stackru) - я добавил эту цель вручную. Чтобы получить подробный вывод, я просто написал так:

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

make check CTEST_OUTPUT_ON_FAILURE=TRUE

Мой подход - это сочетание ответов ony, 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,

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.)

Теперь есть переменная CMake, которая позволяет изменять поведение . CMAKE_CTEST_ARGUMENTS позволяет установить список аргументов для передачи в ctest при запуске через make test.

Поэтому добавьте это в свой файл CMake:

      set(CMAKE_CTEST_ARGUMENTS "--verbose")

Означает, что CTest всегда будет работать подробно. Или только для вывода неудачных тестов используйте:

      set(CMAKE_CTEST_ARGUMENTS "--output-on-failure")

ctest -VV или ctest --extra-verbose

Из документации:

Включить более подробный вывод тестов.

Тестовый вывод обычно подавляется, и отображается только сводная информация. Эта опция покажет еще больше результатов теста.

Для людей, использующих Visual Studio, вот еще один вариант (хак) по теме:

cmake -E env CTEST_OUTPUT_ON_FAILURE=1 cmake --build . --target RUN_TESTS

Чтобы показать результат с XML-файлом, вы должны выполнить тест с помощью следующей команды

~$ ctest -T Test

и мы нашли результат в Testing/1234123432/test.xml, а другие файлы тоже сгенерированы в папке тестирования

Другие вопросы по тегам