如何在某些子目录中强制执行 ctest only 运行 单元测试?
How to force ctest only run unit tests in some subdirectories?
我的 cmake 项目具有以下树结构:
├── CMakeLists.txt
├── basis
├── build
├── deps
├── study
其中 /deps
包含所有第 3 方依赖项,/basis
和 /study
目录包含我编写的例程。
在我的主 CMakeLists.txt 文件中,我有以下代码来启用 CxxTest
cmake_minimum_required(VERSION 3.14)
project(study_cmake)
set( CMAKE_BUILD_TYPE "Debug" )
add_subdirectory(deps/eigen)
set(CMAKE_PREFIX_PATH ${CMAKE_SOURCE_DIR}/deps/cxxtest/)
find_package(CxxTest REQUIRED)
if(CXXTEST_FOUND)
include_directories(${CXXTEST_INCLUDE_DIR})
message( 'CXXTEST_INCLUDE_DIR:' ${CXXTEST_INCLUDE_DIR} )
enable_testing()
endif()
add_subdirectory(study)
add_subdirectory(basis)
在/basis/CMakeLists.txt
,我有
project(basis)
add_library(
basis
include/bernstein.h
src/bernstein.cpp
)
CXXTEST_ADD_TEST(test_bernstein test_bernstein.cc ${CMAKE_CURRENT_SOURCE_DIR}/test/test_bernstein.h
在/study/CMakeLists.txt
中,我有与/basis/CMakeLists.txt
中类似的东西。 运行在build
目录下cmake ..
和make
后,我可以运行ctest
在build/basis/
,build/study/
to 运行 分别定义在这两个子目录中的单元测试。但是我想有办法运行定义在这两个子目录中的所有单元测试,所以我在/build/
中尝试了运行ctest
。不幸的是,这个命令似乎也 运行 在 /deps/
中的 3d 方依赖项中定义的所有单元测试。我们如何才能强制 ctest
仅 运行 所有在 build/basis/
和 build/study/
中定义的单元测试?
我首先要尝试的是 ctest
的正则表达式选择器。来自 ctest --help
-L <regex>, --label-regex <regex>
= Run tests with labels matching regular
expression.
-R <regex>, --tests-regex <regex>
= Run tests matching regular expression.
-E <regex>, --exclude-regex <regex>
= Exclude tests matching regular expression.
-LE <regex>, --label-exclude <regex>
= Exclude tests with labels matching regular
expression.
如果您想将一堆测试组合在一起,您可以在它们上设置标签。
CXXTEST_ADD_TEST(test_bernstein test_bernstein.cc ${CMAKE_CURRENT_SOURCE_DIR}/test/test_bernstein.h
CXXTEST_ADD_TEST(test_scarry test_scarry.cc ${CMAKE_CURRENT_SOURCE_DIR}/test/test_scarry.h
CXXTEST_ADD_TEST(test_mayer test_mayer.cc ${CMAKE_CURRENT_SOURCE_DIR}/test/test_mayer.h
CXXTEST_ADD_TEST(test_king test_king.cc ${CMAKE_CURRENT_SOURCE_DIR}/test/test_king.h
set_tests_properties(test_bernstein test_scarry test_mayer PROPERTIES LABELS "fun")
set_tests_properties(test_king PROPERTIES LABELS "scary")
请注意 set_tests_properties()
仅定义使用 add_test()
创建的测试的属性(CXXTEST_ADD_TEST
在幕后进行。)然后您可以 运行 ctest -L fun
运行 只有“有趣”的测试。
$ ctest -L fun
Test project /home/me/myproject
Start 1: test_bernstein
1/3 Test #1: test_bernstein .............. Passed 2.19 sec
Start 2: test_scarry
2/3 Test #2: test_scarry ................. Passed 2.19 sec
Start 3: test_mayer
3/3 Test #3: test_mayer .................. Passed 2.19 sec
100% tests passed out of 23
Total Test time (real) = 6.57 sec
$
我的 cmake 项目具有以下树结构:
├── CMakeLists.txt
├── basis
├── build
├── deps
├── study
其中 /deps
包含所有第 3 方依赖项,/basis
和 /study
目录包含我编写的例程。
在我的主 CMakeLists.txt 文件中,我有以下代码来启用 CxxTest
cmake_minimum_required(VERSION 3.14)
project(study_cmake)
set( CMAKE_BUILD_TYPE "Debug" )
add_subdirectory(deps/eigen)
set(CMAKE_PREFIX_PATH ${CMAKE_SOURCE_DIR}/deps/cxxtest/)
find_package(CxxTest REQUIRED)
if(CXXTEST_FOUND)
include_directories(${CXXTEST_INCLUDE_DIR})
message( 'CXXTEST_INCLUDE_DIR:' ${CXXTEST_INCLUDE_DIR} )
enable_testing()
endif()
add_subdirectory(study)
add_subdirectory(basis)
在/basis/CMakeLists.txt
,我有
project(basis)
add_library(
basis
include/bernstein.h
src/bernstein.cpp
)
CXXTEST_ADD_TEST(test_bernstein test_bernstein.cc ${CMAKE_CURRENT_SOURCE_DIR}/test/test_bernstein.h
在/study/CMakeLists.txt
中,我有与/basis/CMakeLists.txt
中类似的东西。 运行在build
目录下cmake ..
和make
后,我可以运行ctest
在build/basis/
,build/study/
to 运行 分别定义在这两个子目录中的单元测试。但是我想有办法运行定义在这两个子目录中的所有单元测试,所以我在/build/
中尝试了运行ctest
。不幸的是,这个命令似乎也 运行 在 /deps/
中的 3d 方依赖项中定义的所有单元测试。我们如何才能强制 ctest
仅 运行 所有在 build/basis/
和 build/study/
中定义的单元测试?
我首先要尝试的是 ctest
的正则表达式选择器。来自 ctest --help
-L <regex>, --label-regex <regex>
= Run tests with labels matching regular
expression.
-R <regex>, --tests-regex <regex>
= Run tests matching regular expression.
-E <regex>, --exclude-regex <regex>
= Exclude tests matching regular expression.
-LE <regex>, --label-exclude <regex>
= Exclude tests with labels matching regular
expression.
如果您想将一堆测试组合在一起,您可以在它们上设置标签。
CXXTEST_ADD_TEST(test_bernstein test_bernstein.cc ${CMAKE_CURRENT_SOURCE_DIR}/test/test_bernstein.h
CXXTEST_ADD_TEST(test_scarry test_scarry.cc ${CMAKE_CURRENT_SOURCE_DIR}/test/test_scarry.h
CXXTEST_ADD_TEST(test_mayer test_mayer.cc ${CMAKE_CURRENT_SOURCE_DIR}/test/test_mayer.h
CXXTEST_ADD_TEST(test_king test_king.cc ${CMAKE_CURRENT_SOURCE_DIR}/test/test_king.h
set_tests_properties(test_bernstein test_scarry test_mayer PROPERTIES LABELS "fun")
set_tests_properties(test_king PROPERTIES LABELS "scary")
请注意 set_tests_properties()
仅定义使用 add_test()
创建的测试的属性(CXXTEST_ADD_TEST
在幕后进行。)然后您可以 运行 ctest -L fun
运行 只有“有趣”的测试。
$ ctest -L fun
Test project /home/me/myproject
Start 1: test_bernstein
1/3 Test #1: test_bernstein .............. Passed 2.19 sec
Start 2: test_scarry
2/3 Test #2: test_scarry ................. Passed 2.19 sec
Start 3: test_mayer
3/3 Test #3: test_mayer .................. Passed 2.19 sec
100% tests passed out of 23
Total Test time (real) = 6.57 sec
$