How do I run tests built using VisualStudio, via CMake/CTest/Catch2 from the CLI?
我正在尝试一次学习几件事(可能是我的第一个问题……),即:使用Catch2进行单元测试以及使用CMake进行构建。
在我的调查过程中,CTest作为在CMake中管理测试的一种预先烘焙的方式出现在雷达上,并且似乎"支持" Catch2。
尽管一切似乎都可以进行,但我无法像我希望的那样自动运行测试。
具体来说,我有一个源代码树,它有时包含我正在测试的库,并且我希望能够坐在树的顶部并执行某种"运行我的测试"命令(理想情况下,作为完整版本的一部分来运行它们,但这是另一天)。
因此,这是我感兴趣的库的CMakeLists.txt文件(
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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,则会得到:
1 2 3 4 5 | L:\\scratch>ctest ********************************* No test configuration file found! ********************************* ... |
要么
1 2 3 | L:\\scratch>ctest . Test project L:/scratch No tests were found!!! |
根据我在其他地方阅读的内容,
因此,这里的建议似乎是我应该使用
1 2 3 4 | L:\\scratch>cmake --build BUILD --target ALL_TESTS ... MSBUILD : error MSB1009: Project file does not exist. Switch: ALL_TESTS.vcxproj |
当然,我可以运行测试:
1 2 3 | L:\\scratch>BUILD\\shared\\testeroolib\\Debug\\testeroolib_test.exe =============================================================================== All tests passed (1 assertion in 1 test case) |
我希望自己做了些小巧的事,但我很有可能在这里完全犯错了!
我相信问题的根本原因是缺少调试/发布配置信息,而在使用Visual Studio进行配置时,
1 | ctest -C Debug |
例如。
我相信我已经找到了(两部分)答案。
第一部分是从顶层运行ctest效果不好,您需要从build文件夹运行它。 事后看来,这很明显:(
1 2 3 4 | cmake -S . -B BUILD cmake --build BUILD cd BUILD ctest |
我在此答案中发现的不太明显的部分是:https://stackoverflow.com/a/13551858/11603085。
即,