Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Testing 如何在进行测试后强制cmake写入测试输出_Testing_Cmake_Fortran - Fatal编程技术网

Testing 如何在进行测试后强制cmake写入测试输出

Testing 如何在进行测试后强制cmake写入测试输出,testing,cmake,fortran,Testing,Cmake,Fortran,我正在用cmake构建fortran项目,我找不到打印到控制台水果测试结果的解决方案,它们看起来像这样: Test module initialized . : successful assert, F : failed assert 7.00000000000000 -3.60000000000000 7.00000000000000 FFF Start of FRUIT summary: Some tests f

我正在用cmake构建fortran项目,我找不到打印到控制台水果测试结果的解决方案,它们看起来像这样:

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测试并不意味着通过了水果测试,所以每次运行测试时我都要打印水果文件(只是为了让它工作)。我尝试在测试命令的末尾添加打印命令(类似于下面的命令),添加

在add_测试结束时,构建自定义的after-build命令(我无法在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}"
      )

cmake测试的输出被捕获到一个文件中(
Testing/Temporary/LastTest.log
,在我当前的项目中)

cmake测试依赖于测试程序的返回代码,每个测试一个测试程序

如果您希望运行作为测试“驱动程序”的程序,我建议使用。此命令将添加运行您选择的命令的目标

例如:

add_custom_target(Name unit_tests tests)
add_dependencies(unit_tests tests)
不过,我不确定在这种情况下是否需要
add\u dependencies
行(因为
tests
是cmake管理的目标)

然后,你就可以跑了

make unit_tests

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

我已经解决了一个缺乏测试输出的问题,它使用定制的CMake目标在详细模式下调用ctest等。 e、 g

make unit_tests
enable_testing()

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