gpt4 book ai didi

cmake - CppUnit 测试总是通过 Ctest

转载 作者:行者123 更新时间:2023-12-01 23:13:49 27 4
gpt4 key购买 nike

我正在使用 CMake 开发一个项目,并且刚刚集成了一些 CppUnit 测试。我想使用 CTest,因此我在 CMakeLists.txt 文件中使用了 add_test,以便在键入 make test 时执行测试。然而我观察到,当输入 make test 时,它表示所有测试都通过了,即使我做了一个有微不足道的错误的测试。错误的测试在手动执行时会报告这些错误(例如 ./my_test),但在使用 make test 执行时不会报告这些错误。

这里是我的 CMakeLists.txt 在测试目录中的内容:

add_executable(TestDataSpace TestDataSpace.cpp)
target_link_libraries(TestDataSpace ${DEP_LIBRARIES} ${CPPUNIT_LIBRARIES})

add_executable(TestVariableManager TestVariableManager.cpp)
target_link_libraries(TestVariableManager ${DEP_LIBRARIES} ${CPPUNIT_LIBRARIES})

add_executable(TestLayoutManager TestLayoutManager.cpp)
target_link_libraries(TestLayoutManager ${DEP_LIBRARIES} ${CPPUNIT_LIBRARIES})

add_test(NAME "TestDataSpace" COMMAND ${MY_PROJECT_SOURCE_DIR}/test/TestDataSpace)
add_test(NAME "TestVariableManager" COMMAND ${MY_PROJECT_SOURCE_DIR}/test/TestVariableManager)
add_test(NAME "TestLayoutManager" COMMAND ${MY_PROJECT_SOURCE_DIR}/test/TestLayoutManager)

CTest 确实找到了可执行文件,因为为命令设置了错误的路径会使 CMake 提示它找不到它们。

make test 输出如下:

Running tests... Test project

Start 1: TestDataSpace 1/3 Test #1: TestDataSpace ....................   Passed    0.01 sec
Start 2: TestVariableManager 2/3 Test #2: TestVariableManager .............. Passed 0.02 sec
Start 3: TestLayoutManager 3/3 Test #3: TestLayoutManager ................ Passed 0.01 sec

100% tests passed, 0 tests failed out of 3

我错过了什么?

最佳答案

我不熟悉 CppUnit,但我怀疑您的可执行文件总是返回 0,即使测试失败。 CTest 返回 0 表示成功。

如果您在测试失败时将返回值更改为非零数字,您应该会看到 CTest 的预期输出。

或者,您可以使用 set_tests_properties 修改 CTest 的行为。设置 PASS_REGULAR_EXPRESSION 的值和/或 FAIL_REGULAR_EXPRESSION .如果设置了其中任何一个,则忽略返回值。例如,您可以这样做:

set_tests_properties(
TestDataSpace
TestVariableManager
TestLayoutManager
PROPERTIES PASS_REGULAR_EXPRESSION "TEST PASSED;Pass")

顺便说一句,您可以避免将完整路径传递给您的案例中的测试可执行文件,因为它们是在同一 CMakeLists.txt 中定义的实际 CMake 目标:

add_test(NAME TestDataSpace COMMAND TestDataSpace)
add_test(NAME TestVariableManager COMMAND TestVariableManager)
add_test(NAME TestLayoutManager COMMAND TestLayoutManager)

关于cmake - CppUnit 测试总是通过 Ctest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17891473/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com