Подтвердить что ты не робот

Используя 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, который сообщает, что на самом деле не удалось:

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?

4b9b3361

Ответ 1

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

env CTEST_OUTPUT_ON_FAILURE=1 make check

В этом вопросе и ответе Qaru показано, как устанавливать переменные среды в Visual Studio.

Ответ 2

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

ctest --verbose

Ответ 3

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

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

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

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

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

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

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

Ответ 4

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

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

Ответ 5

make check CTEST_OUTPUT_ON_FAILURE=TRUE

Ответ 6

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

ctest --output-on-failure

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

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

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

Ответ 7

Мой подход представляет собой комбинацию ответов от 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.)

Ответ 8

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

make test ARGS="-V"

Ответ 9

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

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

Ответ 10

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

~$ ctest -T Test

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