我正在使用cmake构建fortran项目,我无法找到打印到解决方案FRUIT测试结果的解决方案,它们看起来像这样:
Test module initialized
. : successful assert, F : failed assert
7.00000000000000 -3.60000000000000 7.00000000000000
FFF
Start of FRUIT summary:
Some tests failed!
-- Failed assertion messages:
[_not_set_]:Expected [7.00000000000000], Got [1.00000000000000]
[_not_set_]:Expected [-3.60000000000000], Got [2.00000000000000]
[_not_set_]:Expected [7.00000000000000], Got [6.00000000000000]
-- end of failed assertion messages.
Total asserts : 3
Successful : 0
Failed : 3
Successful rate: 0.00%
Successful asserts / total asserts : [ 0 / 3 ]
Successful cases / total cases : [ 0 / 0 ]
-- end of FRUIT summary
我通过make测试获得的输出如下:
make test
Running tests...
Test project /home/konrad/Desktop/fortran
Start 1: unit_tests
1/1 Test #1: unit_tests ....................... Passed 0.01 sec
100% tests passed, 0 tests failed out of 1
Total Test time (real) = 0.01 sec
由于通过cmake测试并不意味着传递FRUIT测试,我想每次运行测试时打印FRUIT文件(只是为了让它工作)。我尝试在测试命令结束时添加打印命令(比较少),添加
-P ${CMAKE_TEST_DIR}/unit_tests.txt
在add_test结束时,构建自定义构建命令后(我无法在make test之后运行,所以如果你知道怎么做也会解决它,似乎make test或者测试不是真的一个目标)
我的cmake文件的最后一部分包含所有测试代码:
add_executable(task ${TASK_SOURCES})
add_executable(tests ${TEST_SOURCES})
enable_testing()
set(run_command "${CMAKE_BINARY_DIR}/tests")
set(UNIT_TEST_NAME "unit_tests.txt")
file(MAKE_DIRECTORY ${CMAKE_TEST_DIR})
add_test( NAME unit_tests
COMMAND sh -c
"rm -f ${CMAKE_TEST_DIR}/${UNIT_TEST_NAME} \
&& ${run_command} \
>> ${CMAKE_TEST_DIR}/${UNIT_TEST_NAME} \
&& less ${CMAKE_TEST_DIR}/${UNIT_TEST_NAME}"
)
答案 0 :(得分:1)
cmake测试的输出被捕获到我当前项目中的文件(Testing/Temporary/LastTest.log
)。
cmake测试依赖于测试程序的返回代码,每次测试都有一个测试程序。
如果您希望运行一个"驱动程序"对于您的测试,我建议使用add_custom_target
。此命令将添加一个运行您选择的命令的目标。
例如:
add_custom_target(Name unit_tests tests)
add_dependencies(unit_tests tests)
我不确定在这种情况下是否需要add_dependencies
行(因为tests
是由cmake管理的目标)。
然后,你可以运行
make unit_tests
它将运行您的测试驱动程序。
答案 1 :(得分:1)
我已经用自定义CMake目标解决了缺少测试输出的问题,该目标将在详细模式下调用ctest等。 e.g。
enable_testing()
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND}
--force-new-ctest-process
--verbose
--output-on-failure
)