Cmake中的两组测试

Two sets of tests in Cmake

我有两组测试(功能测试和单元测试),我希望能够通过 cmake 将哪一组指定为 运行。

一组测试是我想要 运行 通过 "make test".

进行的单元测试

另一组测试是我想 运行 通过 "make functionaltests".

进行的功能测试

目前两者都是 ctest 的一部分,因为我 运行 通过 add_test 这两个套件。我的 CMakeLists.txt 文件是这样的:

 FOREACH(functional_test ${functional_tests})
     ADD_TEST(NAME functional_test COMMAND f_test.sh functional_test)
 ENDFOREACH(functional_test)

 FOREACH(unit_test ${unit_tests})
     ADD_TEST(NAME unit_test COMMAND u_test.sh unit_test)
 ENDFOREACH(unit_test)

我想对这两个套件都使用 ctest,因为它为测试套件(哪些测试通过了哪些测试失败了)提供了一种漂亮、可读的格式。

我宁愿不必创建自定义可执行文件,为其创建一个名为 functionaltests 的目标,并尝试模仿 ctest 打印测试结果的方式。

当你 运行 ctest 时,你可以给它一个正则表达式来选择要 运行 的测试。因此,您可以根据支持此模式的模式在 CMakeLists 文件中命名测试:

 set(functional_tests "test1" "test2" "test3")
 set(unit_tests "test1" "test2" "test3")

 FOREACH(test ${functional_tests})
     ADD_TEST(NAME functional_${test} COMMAND f_test.sh ${test})
 ENDFOREACH()

 FOREACH(test ${unit_tests})
     ADD_TEST(NAME unit_${test} COMMAND u_test.sh ${test})
 ENDFOREACH()

现在您可以 运行 功能测试:

ctest -R functional_

或单元测试:

ctest -R unit_

如果你想创建目标以便可以通过 make 执行这些目标,你可以这样做:

add_custom_target(unit_tests COMMAND ${CMAKE_CTEST_COMMAND} -R unit_)
add_custom_target(functional_tests COMMAND ${CMAKE_CTEST_COMMAND} -R functional_)

那么你可以运行:

make unit_tests
make functional_tests

您可能希望将依赖项添加到自定义命令,以便它们会导致您正在测试的任何可执行文件在必要时重建。