Catch2 cmake函数'catch_discover_tests()'在有效时间内不起作用

时间:2019-01-27 13:55:42

标签: c++ cmake catch2

我将Catch2用于单元测试。我要在构建后运行测试。
所以我在Catch中使用了'cath_discover_test'函数。
但是在构建时,不要打印任何有关测试的内容。
如下:

greeting

这是 test.cmake 文件源代码:

> cmake --build .
blah ~
blah ~
PostBuildEvent:
  setlocal
  "C:\Program Files\CMake\bin\cmake.exe" -D TEST_TARGET=foo -D TEST_EXECUTABLE=C:/Users/MyName/workspace/someproject/build/
  Debug/foo.exe -D TEST_EXECUTOR= -D TEST_WORKING_DIR=C:/Users/MyName/workspace/someproject/build -D TEST_SPEC= -D TEST_EXT
  RA_ARGS= -D TEST_PROPERTIES= -D TEST_PREFIX= -D TEST_SUFFIX= -D TEST_LIST=foo_TESTS -D CTEST_FILE=C:/Users/MyName/workspace/a
  someproject/build/foo_tests-b858cb2.cmake -P "C:/Program Files (x86)/Catch2/lib/cmake/Catch2/CatchAddTests.cmake"
  if %errorlevel% neq 0 goto :cmEnd
  :cmEnd
  endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
  :cmErrorLevel
  exit /b %1
  :cmDone
  if %errorlevel% neq 0 goto :VCEnd
  :VCEnd
blah ~
blah ~
end

但是,我通过下面的ctest执行测试,测试工作。

find_package(Catch2 REQUIRED)
add_executable(foo ${PROJECT_SOURCE_DIR}/test/test.cpp)
target_include_directories(foo PUBLIC ${PROJECT_SOURCE_DIR}/include)
target_link_libraries(foo Catch2::Catch2)

include(CTest)
include(Catch)
catch_discover_tests(foo)

构建后如何运行测试并显示测试结果输出?

1 个答案:

答案 0 :(得分:0)

CMake不希望您在构建时同时运行测试。您可以想象一下交叉编译器的情况,其中目标体系结构与主机构建机器不同,在这种情况下,在构建时运行测试是没有意义的。

我想将构建的测试作为CMake构建的一部分运行,请看add_custom_command来运行POST_BUILD命令。