Как передать параметры для изменения результатов модульных тестов при использовании CMake и BOOST? - PullRequest
0 голосов
/ 04 февраля 2020

В предыдущем предыдущем вопросе я спросил, как запустить модульные тесты с CMake и BOOST. В этом вопросе мне нужно отформатировать вывод тестовых прогонов. В частности, вывод по умолчанию не очень проницателен, и я хочу изменить его; При выполнении тестов мне нужно передать параметры типа --report-level=detailed.

Мой tests/CMakeLists.txt файл выглядит следующим образом.

find_package (Boost COMPONENTS system filesystem unit_test_framework REQUIRED)
add_definitions (-DBOOST_TEST_DYN_LINK)

include_directories (../include ${Boost_INCLUDE_DIRS})

file(GLOB TEST_SRCS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.cpp)

foreach(testSrc ${TEST_SRCS})
    get_filename_component(testName ${testSrc} NAME_WE)
    add_executable(${testName} ${testSrc})

    target_link_libraries(${testName} ${Boost_LIBRARIES} my_lib)

    set_target_properties(${testName} PROPERTIES
            RUNTIME_OUTPUT_DIRECTORY  ${CMAKE_CURRENT_SOURCE_DIR}/testBin)

    add_test(NAME ${testName}
            WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/testBin
            COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/testBin/${testName}
            )
endforeach(testSrc)

Я изменил его, чтобы он выглядел следующим образом. Примечание. Я пытался передать аргументы в нескольких местах без отчаяния, один во время add_test и один во время add_custom_command.

find_package(Boost COMPONENTS system filesystem unit_test_framework REQUIRED)
add_definitions(-DBOOST_TEST_DYN_LINK)

include_directories(../include/graph ${Boost_INCLUDE_DIRS})

file(GLOB TEST_SRCS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.cpp)

foreach (testSrc ${TEST_SRCS})
    get_filename_component(testName ${testSrc} NAME_WE)
    add_executable(${testName} ${testSrc})

    target_link_libraries(${testName} ${Boost_LIBRARIES} my_lib)

    set_target_properties(${testName} PROPERTIES
            RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/testBin)

    add_test(NAME ${testName}
            WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/testBin
            COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/testBin/${testName} --build_info --output_format=XML --log_level=all --report_level=detailed
            )
    add_custom_command(
            OUTPUT ${testName}
            POST_BUILD
            COMMAND ${testName} ${CMAKE_CURRENT_BINARY_DIR}/testBin/${testName}
            ARGS "--build_info --output_format=XML --log_level=all --report_level=detailed"
    )
endforeach (testSrc)

Вот модифицированный пример вывода при запуске make test.

Running tests...
Test project /mnt/c/Users/me/git/my_lib/cmake-build-debug
    Start 1: test_A
1/7 Test #1: test_A .....................   Passed    0.02 sec
    Start 2: test_B
2/7 Test #2: test_B .........................   Passed    0.02 sec
    Start 3: test_C
3/7 Test #3: test_C ........................   Passed    0.03 sec
    Start 4: test_D
4/7 Test #4: test_D .......................   Passed    0.03 sec
    Start 5: test_E
5/7 Test #5: test_E ........................   Passed    0.02 sec
    Start 6: test_F
6/7 Test #6: test_F ..................   Passed    0.02 sec
    Start 7: test_G
7/7 Test #7: test_G ....................   Passed    0.02 sec

100% tests passed, 0 tests failed out of 7

Total Test time (real) =   0.17 sec

Я на самом деле хочу поэкспериментировать с флагами, чтобы сделать вывод более многословным. Например, ../tests/testBin/test_A --report_level=detailed.

Running 2 test cases...

Test module "TestModule" has passed with:
  2 test cases out of 2 passed
  39 assertions out of 39 passed

  Test suite "test_x" has passed with:
    2 test cases out of 2 passed
    39 assertions out of 39 passed

    Test case "test_x/y" has passed with:
      34 assertions out of 34 passed

    Test case "test_x/z" has passed with:
      5 assertions out of 5 passed

При поиске по inte rnet, некоторые из лучших результатов передаются во флаги во время add_test ( здесь ), а другие во время add_custom_command здесь ). Я не уверен, как они заставляют это работать. Вот некоторая информация о моей среде.

  • cmake v3.10.2
  • boost v1.65.1
  • g ++ v7.4.0

Any идеи о том, как / где передать эти флаги / аргументы, чтобы изменить вывод тестов в файле CMakeLists.txt?

1 Ответ

0 голосов
/ 04 февраля 2020

Я думаю, что вы ищете, может быть CTest , который обеспечивает Режим сборки и тестирования . При этом вы сможете вызывать свою тестовую команду с помощью

ctest --build-and-test <path-to-source> <path-to-build>
      --build-generator <generator>
      [<options>...]
      [--build-options <opts>...]
      [--test-command <command> [<args>...]]

. Убедитесь, что добавили эти две команды в ваш CMakeLists.txt

enable_testing()
include(CTest)

. С этим вы должны иметь возможность удалить пользовательскую команду и вызвать ваши тесты напрямую с помощью команды CTest.

...