如何通过 CLI 中的 CMake/CTest/Catch2 运行使用 VisualStudio 构建的测试?



我正在尝试同时学习几件事(可以说是我的第一个问题......(,即:使用 Catch2 进行单元测试和使用 CMake 进行构建。

在我的调查过程中,CTest作为管理CMake内部测试的预制方式出现在雷达上,并且似乎"支持"Catch2。

虽然事情似乎进展顺利,但我无法像我希望的那样自动运行我的测试。

具体来说,我有一个源代码树,它在某些时候包含我正在测试的库,我希望能够坐在树的顶部并执行某种"运行我的测试"命令(理想情况下运行它们作为完整构建的一部分,但那是另一天(。

所以这是我感兴趣的库的CMakeLists.txt文件(L:scratchsharedtesteroolibCMakeLists.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>BUILDsharedtesteroolibDebugtesteroolib_test.exe
===============================================================================
All tests passed (1 assertion in 1 test case)

我希望我做了一些小混乱,但很有可能我在这里完全错了棍子的一端!

我相信我已经找到了(两部分(答案。

第一部分是从顶层运行测试不好,你需要从构建文件夹运行它。 事后看来,这是很明显:(

cmake -S . -B BUILD
cmake --build BUILD
cd BUILD
ctest

我在这个答案中发现不太明显的部分是:https://stackoverflow.com/a/13551858/11603085。 也就是说,enable_testing()调用需要在顶层CMakeLists.txt,而不是实际构建库的更下方的调用。

我相信问题的根本原因是缺少调试/发布配置信息,cmake使用Visual Studio进行配置时需要这些信息。尝试:

ctest -C Debug

例如。

相关内容

  • 没有找到相关文章

最新更新