使用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中进行什么更改才能始终以
--verbose
运行CTest?是否有更好的方法将Boost单元测试与CMake / CTest一起使用?
已邀请:
您可以设置环境变量
CTEST_OUTPUT_ON_FAILURE
,该变量将在测试失败时向您显示测试程序的任何输出。使用Makefile和命令行时执行此操作的一种方法如下:
env CTEST_OUTPUT_ON_FAILURE=1 make check
本堆栈溢出问答展示了如何在Visual Studio中设置环境变量。
制作完成项目后,您可以直接致电ѭ7。
ctest --verbose
您可以检查ѭ​​9ѭ子文件夹。运行make测试后会自动创建它。此文件夹包含两个文件:
LastTest.log
LastTestsFailed.log
LastTest.log
包含运行测试所需的输出。
LastTestFailed.log
包含失败测试的名称。因此,您可以在执行
make test
之后手动检查它们。 第二种方法是让ctest在运行测试后向您显示日志文件的内容: 将CTestCustom.ctest(例如,可以使用configure file命令执行)放置在生成目录中(从中运行
make test
),其内容如下: CTEST_CUSTOM_POST_TEST(\“ cat Testing / Temporary / LastTest.log \”) 您可以使用执行类似操作的任何Windows cmd命令来代替cat。 再次运行
make test
并获得利润! 您可以在此处找到有关自定义ctest的其他信息。只需转到“自定义cmake”部分。 祝好运!
我必须自己添加“检查”目标。 \“进行测试\”出于某种原因不执行任何操作。所以我做了什么(就像在stackoverflow上的某处所建议的那样)-我手动添加了这个目标。为了获得详细的输出,我将其编写为:
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} --verbose)
make check CTEST_OUTPUT_ON_FAILURE=TRUE
有一个非常简单的解决方案(由于某种原因很难通过Google搜索找到):
ctest --output-on-failure
如果您将CMake与Visual Studio的打开文件夹功能一起使用,则可以添加
\"ctestCommandArgs\": \"--output-on-failure\"
设置为您的构建配置。
我的方法是结合ony,zbyszek和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版本上,可能需要用ѭ31替换ѭ28;我尚未在Linux上进行过测试。)
这使测试输出更加详细:
make test ARGS=\"-V\"
对于使用Visual Studio的人,这里是主题的另一种变体(hack):
cmake -E env CTEST_OUTPUT_ON_FAILURE=1 cmake --build . --target RUN_TESTS
要使用XML文件显示结果,您必须使用以下命令执行测试
~$ ctest -T Test
我们在Testing / 1234123432 / test.xml中找到了结果 在测试文件夹中也会生成其他文件
ctest -VV
ctest --extra-verbose
从文档: 启用测试的更多详细输出。 测试输出通常被抑制,只有摘要信息 显示。此选项将显示更多测试输出。

要回复问题请先登录注册