使用CMake,如何从CTest获得详细输出?

时间:2011-04-18 23:15:37

标签: cmake ctest

我正在使用CMake来构建我的项目。我添加了一个使用Boost单元测试框架的单元测试二进制文件。这个二进制文件包含所有单元测试。我已经添加了由CTest运行的二进制文件:

ADD_EXECUTABLE( tftest test-main.cpp )
ENABLE_TESTING()
ADD_TEST( UnitTests tftest)

但Visual Studio中的构建输出仅显示运行CTest的结果:

      Start 1: UnitTests
  1/1 Test #1: UnitTests ................***Failed    0.05 sec

  0% tests passed, 1 tests failed out of 1

这不是很有用,因为我看不出哪个测试失败了。如果我使用--verbose从命令行手动运行ctest,我会从Boost单元测试中获得输出,告知实际失败的内容:

1: Test command: tftest.exe
1: Test timeout computed to be: 9.99988e+006
1: Running 4 test cases...
1: test-main.cpp(20): error in "sanity_check3": check 1 == 2 failed
1:
1: *** 1 failure detected in test suite "Master Test Suite"
1/1 Test #1: UnitTests ................***Failed    0.00 sec

那么,我需要在CMakeLists.txt中更改什么才能让CTest始终与--verbose一起运行?有没有更好的方法来使用CMake / CTest进行Boost单元测试?

11 个答案:

答案 0 :(得分:71)

您可以设置环境变量CTEST_OUTPUT_ON_FAILURE,它会在测试失败时显示测试程序的任何输出。使用Makefile和命令行时,这样做的一种方法如下:

env CTEST_OUTPUT_ON_FAILURE=1 make check

This Stack Overflow question and answer显示了如何在Visual Studio中设置环境变量。

答案 1 :(得分:27)

  1. 您可以查看Testing/Temporary子文件夹。它在运行make test后自动创建。此文件夹包含两个文件:LastTest.logLastTestsFailed.logLastTest.log包含运行测试的所需输出。 LastTestFailed.log包含失败测试的名称。因此,您可以在执行make test

  2. 后手动检查它们
  3. 第二种方法是让ctest在运行测试后向您显示日志文件的内容:

    1. 放入 build dir (从中运行make test)文件CTestCustom.ctest(您可以使用 configure file 命令执行此操作,示例)以下内容

      CTEST_CUSTOM_POST_TEST(“cat Testing / Temporary / LastTest.log”)

  4. 您可以使用任何执行类似操作的Windows cmd命令代替cat。

    1. 再次运行make test并获得利润!
    2. 有关自定义ctest的其他信息,您可以找到here。只需步骤“自定义cmake”部分。 祝你好运!

答案 2 :(得分:27)

您可以在制作和制作项目后直接致电ctest

ctest --verbose

答案 3 :(得分:19)

我必须自己添加“检查”目标。 “做测试”由于某种原因没有做任何事情。所以我做了什么(就像在stackoverflow上提到的那样) - 我手动添加了这个目标。为了获得详细的输出,我只是写了:

add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} --verbose)

答案 4 :(得分:15)

make check CTEST_OUTPUT_ON_FAILURE=TRUE

答案 5 :(得分:13)

有一个非常简单的解决方案(由于某些原因很难通过Google搜索找到):

ctest --output-on-failure

如果您在Visual Studio的打开文件夹功能中使用CMake,则可以添加

"ctestCommandArgs": "--output-on-failure"

设置为您的构建配置。

答案 6 :(得分:10)

我的方法是答案from onyfrom zbyszekfrom tarc的组合。我使用${CMAKE_COMMAND}变量(设置为调用的cmake可执行文件的绝对路径)和-E env CTEST_OUTPUT_ON_FAILURE=1参数来使用${CMAKE_CTEST_COMMAND} -C $<CONFIG>调用实际的ctest命令。为了帮助澄清发生了什么,我从三个cmake -E echo命令开始,以显示当前工作目录和要调用的ctest命令。以下是我致电add_custom_target的方式。

add_custom_target(check 
        ${CMAKE_COMMAND} -E echo CWD=${CMAKE_BINARY_DIR}
        COMMAND ${CMAKE_COMMAND} -E echo CMD=${CMAKE_CTEST_COMMAND} -C $<CONFIG>
        COMMAND ${CMAKE_COMMAND} -E echo ----------------------------------
        COMMAND ${CMAKE_COMMAND} -E env CTEST_OUTPUT_ON_FAILURE=1
            ${CMAKE_CTEST_COMMAND} -C $<CONFIG>
    WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
    DEPENDS ALL_BUILD
    )

这对于MSVC IDE很有用,其中任何测试错误都显示为可点击的编译错误。有关cmake -E便携式命令行工具模式的文档,请参阅cmake -E env。我还在ALL_BUILD上添加依赖项,以便在调用check目标之前构建所有项目。 (在Linux版本中,可能需要用ALL_BUILD替换ALL;我还没有在Linux上测试过它。)

答案 7 :(得分:6)

对于使用Visual Studio的人,这里有另一个关于主题的变体(hack):

cmake -E env CTEST_OUTPUT_ON_FAILURE=1 cmake --build . --target RUN_TESTS

答案 8 :(得分:5)

这使测试输出更加冗长:

make test ARGS="-V"

答案 9 :(得分:0)

要显示XML文件的结果,必须使用以下命令执行测试

~$ ctest -T Test

,我们在Testing / 1234123432 / test.xml中找到了结果 在测试文件夹中也会生成其他文件

答案 10 :(得分:0)

ctest -VVctest --extra-verbose

来自documentation

  

启用测试的更多详细输出。

     

通常会抑制测试输出,并且仅摘要信息   显示。此选项将显示更多测试输出。