CppUnit测试总是通过Ctest



我正在使用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输出以下内容:

正在运行测试。。。测试项目

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%测试通过,3个中有0个测试失败

我错过了什么?

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

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

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

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)

相关内容

  • 没有找到相关文章

最新更新