【问题标题】:How to force cmake to write test output after make test如何在 make test 后强制 cmake 写入测试输出
【发布时间】:2018-09-30 02:29:34
【问题描述】:

我正在使用 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}"
      )

【问题讨论】:

    标签: testing cmake fortran


    【解决方案1】:

    我已经解决了自定义 CMake 目标缺少测试输出的问题,该目标将以详细模式调用 ctest 等。 例如

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

    【讨论】:

      【解决方案2】:

      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
      

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

      【讨论】:

        猜你喜欢
        • 2010-10-18
        • 1970-01-01
        • 2013-04-16
        • 2015-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多