目前尚不清楚您是否要求一种适用于 googletest 或 CATCH 的技术,或两者兼而有之。这个答案适用于googletest。
跳过不需要的测试的惯用技术是使用为此目的提供的命令行选项--gtest_filter
. 请参阅文档。
以下是它用于测试套件的示例,其中可能会或可能不会启用蜂鸣器:
test_runner.cpp
#include "gtest/gtest.h"
TEST(t_with_beeper, foo) {
SUCCEED(); // <- Your test code here
}
TEST(t_without_beeper, foo) {
SUCCEED(); // <- Your test code here
}
int main(int argc, char **argv)
{
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
跑:
./test_runner --gtest_filter=t_with_beeper*
输出:
Note: Google Test filter = t_with_beeper*
[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from t_with_beeper
[ RUN ] t_with_beeper.foo
[ OK ] t_with_beeper.foo (0 ms)
[----------] 1 test from t_with_beeper (0 ms total)
[----------] Global test environment tear-down
[==========] 1 test from 1 test case ran. (1 ms total)
[ PASSED ] 1 test.
跑:
./test_runner --gtest_filter=t_without_beeper*
输出:
Note: Google Test filter = t_without_beeper*
[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from t_without_beeper
[ RUN ] t_without_beeper.foo
[ OK ] t_without_beeper.foo (0 ms)
[----------] 1 test from t_without_beeper (0 ms total)
[----------] Global test environment tear-down
[==========] 1 test from 1 test case ran. (1 ms total)
[ PASSED ] 1 test.
该报告没有逐项列出跳过的测试,但它使是否启用蜂鸣器测试变得相当明显,这足以预先消除您担心避免的任何误解或疑虑。
要启用或禁用蜂鸣器测试,test_runner
您可以使用以下方法:
using namespace std;
int main(int argc, char **argv)
{
vector<char const *> args(argv,argv + argc);
int nargs = argc + 1;
if (have_beeper()) {
args.push_back("--gtest_filter=t_with_beeper*");
} else {
args.push_back("--gtest_filter=t_without_beeper*");
}
::testing::InitGoogleTest(&nargs,const_cast<char **>(args.data()));
return RUN_ALL_TESTS();
}
wherehave_beeper()
是一个查询蜂鸣器是否存在的布尔函数。