В предыдущем предыдущем вопросе я спросил, как запустить модульные тесты с 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
?