我试图一次学习几件事(可以说是我的第一个问题......),即:使用 Catch2 进行单元测试和使用 CMake 进行构建。
在我的调查过程中,CTest 作为一种在 CMake 中管理测试的预烘焙方式出现在雷达上,并且似乎“支持”Catch2。
虽然事情似乎进展顺利,但我无法像我希望的那样自动运行我的测试。
具体来说,我有一个源代码树,它在某些时候包含我正在测试的库,我希望能够坐在树的顶部并执行某种“运行我的测试”命令(理想情况下将它们作为完整构建的一部分运行,但那是另一天)。
L:\scratch\shared\testeroolib\CMakeLists.txt
所以这是我感兴趣的库的CMakeLists.txt 文件 ( ):
cmake_minimum_required(VERSION 3.5)
project(testeroolib)
add_library(${PROJECT_NAME} STATIC src/testeroolib.cpp)
target_include_directories(${PROJECT_NAME} PUBLIC include)
set(PROJECT_TEST ${PROJECT_NAME}_test)
add_executable(${PROJECT_TEST} test/catch2_main.cpp)
target_link_libraries(${PROJECT_TEST} PRIVATE Catch)
target_link_libraries(${PROJECT_TEST} PRIVATE ${PROJECT_NAME})
enable_testing()
add_test(NAME TesterooLibTest COMMAND ${PROJECT_TEST})
如果我做天真的事情并从我运行 cmake 的同一位置运行 ctest,我会得到:
L:\scratch>ctest
*********************************
No test configuration file found!
*********************************
...
或者
L:\scratch>ctest .
Test project L:/scratch
No tests were found!!!
根据我在其他地方读到的内容,make test
可以与 GCC 和朋友一起使用,但我使用的是 VS。
所以在这里,建议似乎是我应该使用构建目标,ALL_TESTS
但这对我没有用。
L:\scratch>cmake --build BUILD --target ALL_TESTS
...
MSBUILD : error MSB1009: Project file does not exist.
Switch: ALL_TESTS.vcxproj
当然,我可以运行测试:
L:\scratch>BUILD\shared\testeroolib\Debug\testeroolib_test.exe
===============================================================================
All tests passed (1 assertion in 1 test case)
我希望我做了一些小麻烦,但我很有可能在这里完全搞错了!