C++测试框架:googletest
googletest、gtest
·
gtest 使用记录
gtest 常用命令
Test selection
命令行
--gtest_filter
指定需要执行的测试用例名称,支持通配符和正则表达式。e.g. --gtest_filter=prefix/test_suite_name.test_name- 过滤多个测试用例,用冒号
:
分隔。e.g.:--gtest_filter="FooTest.*:BarTest.case1:OtherTest.case2"
- 过滤不想测试的用例,用符号
-
。e.g.:--gtest_filter="FooTest.*:-FooTest.case1"
运行FooTest套件中除了case1之外的所有用例 - 模糊匹配用例,用符号
:
。e.g.:--gtest_filter="*dhu*:*IHU*"
运行全名包含“dhu”或“IHU”的用例
- 过滤多个测试用例,用冒号
--gtest_list_tests
列出所有测试用例名称,但不会执行测试用例--gtest_also_run_disabled_tests
执行被禁止的测试用例
自定义的main函数
testing::FLAGS_gtest_filter = "*" ;
过滤用例,支持通配符和正则表达式- 过滤多个测试用例,用冒号
:
分隔。e.g.:testing::FLAGS_gtest_filter = "FooTest.*:BarTest.case1:OtherTest.case2;"
- 过滤不想测试的用例,用符号
-
。e.g.:testing::FLAGS_gtest_filter ="FooTest.*:-FooTest.case1;"
运行FooTest套件中除了case1之外的所有用例 - 模糊匹配用例,用符号
:
。e.g.:testing::FLAGS_gtest_filter = "*dhu*:*IHU*;"
运行全名包含“dhu”或“IHU”的用例
- 过滤多个测试用例,用冒号
testing::FLAGS_gtest_list_tests = 1 | 0;
是否列出所有测试用例名称,但不会执行测试用例testing::FLAGS_gtest_also_run_disabled_tests = true | false;
是否执行被禁止的测试用例
Test execution
命令行
--gtest_repeat=[count]
用于重复执行测试用例,可以指定重复次数;e.g. --gtest_repeat=10--gtest_shuffle
随机化测试用例的执行顺序--gtest_random_seed
随机种子用于打乱测试顺序
自定义的main函数
testing::FLAGS_gtest_repeat=[count];
testing::FLAGS_gtest_shuffle = 1;
// 1: shuffle, 0: no shuffletesting::FLAGS_gtest_random_seed = 0;
// 0: use random seed, 1: use fixed seedtesting::FLAGS_gtest_stack_trace_depth = 1;
// 1: stack trace depth, 0: no stack trace
Test output
--gtest_color
开启或关闭测试结果的颜色输出 e.g. --gtest_color=yes|no|auto--gtest_print_time=0
不打印每次测试的运行时间--gtest_output=(json|xml)[:DIRECTORY_PATH/|:FILE_PATH
输出xml/json格式的报告 e.g. --gtest_output=“xml:…/report/output.xml”--gtest_stream_result_to=HOST:PORT
将测试结果流传输到给定的服务器
自定义的main函数
testing::FLAGS_gtest_output = "xml:../report/TestReport.xml";
testing::FLAGS_gtest_stream_result_to = host:port;
testing::FLAGS_gtest_print_time = 1;
// 1: print time, 0: no print timetesting::FLAGS_gtest_color = "yes";
// “yes” or “no”
Assertion behavior
命令行
--gtest_death_test_sytle=(fast|threadsafe)
设置默认的死亡测试类型--gtest_break_on_failure=0|1
失败之后是否停止测试,1-停止,0=不停止 【Linux系统】--gtest_throw_on_failure
将断言失败转换为c++异常,供外部测试框架使用
自定义的main函数
testing::FLAGS_gtest_death_test_style = "threadsafe";
// “threadsafe” or “fast”testing::FLAGS_gtest_break_on_failure = 1;
// 1: break on failure, 0: continue on failuretesting::FLAGS_gtest_throw_on_failure = 1;
// 1: throw on failure, 0: continue on failuretesting::FLAGS_gtest_stack_trace_depth = 1;
// 1: stack trace depth, 0: no stack trace
跳过用例的方法
GTEST_SKIP()
- TestName前加
DISABLED_
e.g. DISABLED_testname
gtest参数化测试
创建参数化测试
- 多重继承自:testing::Test 以及 testing::WithParamInterface (pure interface).
- 继承封装好的类:testing::TestWithParam
用法说明:
- 类内部通过 GetParam() 成员函数调用传入的参数.
- 设置 test suite 时,后缀_P。 e.g. TEST_P(test_suite_name, test_name)
- TEST_P 如果没有 INSTANTIATE_TEST_SUITE_P 会导致测试 suite 结果 FAIL 。如果故意设置为空的话,可以使用GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(FooTest);特殊标记,不会报 FAIL 进行测试.
单参数
class DebugTest: public Test, WithParamInterface<int>{};
TEST_P(DebugTest, case1){
//获取参数
int a = GetParam();
//其他测试步骤
}
INSTANTIATE_TEST_SUITE_P(prefix_1, DebugTest,
Values(1, 2, 3)
);
多参数
Values 的使用
Values(v1, v2, ..., vN)
组合为元组 {v1, v2, …, vN}
class DebugTest: public Test, WithParamInterface<int, int>{};
TEST_P(DebugTest, case2){
//获取参数
int a = std::get<0>(GetParam()); // 1, 3
int b = std::get<1>(GetParam()); // 2, 4
//其他测试步骤
}
INSTANTIATE_TEST_SUITE_P(prefix_2, DebugTest,
Values(
std::make_tuple(1, 2),
std::make_tupel(3, 4)
)
);
Combine 的使用
Combine(g1, g2, ..., gN)
对于给定的 n个 generators g1, g2, …, gN进行笛卡尔乘积得到std::tuple
class DebugTest: public TestWithParam<int, int>{};
TEST_P(DebugTest, case3){
//获取参数
int a = std::get<0>(GetParam()); // 1,1,2,2
int b = std::get<1>(GetParam()); // 3,4,3,4
//其他测试步骤
}
INSTANTIATE_TEST_SUITE_P(prefix_2, DebugTest,
Combine(
Values(1, 2 ),
Values(3, 4)
)
);
先更新这些…
其他的陆续更新…
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献2条内容
所有评论(0)