如何强制CMake在运行make test后输出测试结果

4

我正在使用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 test时得到的输出如下:

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或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}"
      )
3个回答

2

我使用自定义CMake目标解决了测试输出不足的问题,这个目标会以详细模式调用ctest等。

enable_testing()

add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND}
     --force-new-ctest-process
     --verbose
      --output-on-failure
)

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

并且它将运行您的测试驱动程序。

0
我知道这是一个老问题,但我也遇到了同样的问题。上面提供的解决方案都对我没用。
将测试作为构建后命令运行就解决了问题。
  # hack to display verbose testing after build
  add_custom_command(TARGET myTestTarget POST_BUILD
    COMMAND ${CMAKE_CTEST_COMMAND} -C ${CMAKE_BUILD_TYPE} --verbose
    COMMENT "\n\n\n---===== PLEASE REVIEW TEST OUTPUT BELOW =====---\n\n\n"
  )      

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接