GTest接口测试
Gtest运行参数
可以通过系统环境变量设置GTEST_FLAG,可以通过内部代码testing::GTEST_FLAG(output)=””设定,后设置的生效。
- –gtest_list_tests 输出所有用例
- –gtest_filter 过滤用例,支持通配符
- ?*-:(:”是或)
- –gtest_repeat=[COUNT] 用例执行次数
- -1为一直执行,默认出错依然执行,但是增加
- –gtest_color=(yes/no/auto) 输出颜色
- –gtest_print_time 打印执行时间
- –gtest_output=后缀:路径\文件名
- –gtest_break_on_failure 则出错后停止
- –gtest_throw_on_failure 失败抛异常
- –gtest_catch_exceptions 是否捕捉异常,只在Win有效
Gtest断言
ASSERT_系列:如果当前点检测失败则退出当前测试
EXPECT_系列:如果当前点检测失败则继续往下执行
- *_TRUE(condition) 条件为true则通过
- *_FALSE(condition) 条件为false则通过
- *_EQ(expected, actual) ==
- *_NE(val1, val2) !=
- *_LT(val1, val2) <
- *_LE(val1, val2) <=
- *_GT(val1, val2) >
- *_GE(val1, val2) >=
- _STREQ(expected_str, actual_str) == 接收char wchar *
- *_STRNE(str1, str2) !=
- _STRCASEEQ(expected_str, actual_str) 忽略大小写== ,只接收char
_STRCASENE(str1, str2) 忽略大小写!= ,只接收char
*_THROW(statement, exception_type) 语句抛出指定类型的异常
- *_ANY_THROW(statement) 抛出任何异常
*_NO_THROW(statement) 不抛出
*_FLOAT_EQ(expected, actual) 浮点对比
- *_DOUBLE_EQ(expected, actual)
*_NEAR(val1, val2, abs_error) 近似对比
*_PRED1(pred1, val1) pred1表示函数名,val1是参数,验证返回值,最多可以到5,传5个参数。
*_PRED_FORMAT1(pred_format1, val1) 错误时可自定义输出,函数返回值 return testing::AssertionFailure(testring::Message())
*_HRESULT_SUCCEEDED(expression) 表达式是成功的
*_HRESULT_FAILED(expression)
SUCCEED() 用例成功,不往下走
- FAIL() 用例失败,不往下走
- ADD_FAILURE() 失败,但是往下走
testing::StaticAssertTypeEq<int, T> 判断模板是否为int
_DEATH(statement, regex) 语句crash,其regex匹配stderr中内容,实现其实就是调用了 _EXIT
- *_DEATH_IF_SUPPORTED 系统不支持则不执行
- *_EXIT(statement, predicate, regex) 其中predicate必须是接收int返回bool,可用系统
- testing::ExitedWithCode(exit_code)如果程序正常退出并且退出码与exit_code相同则返回true
- testing::KilledBySignal(signal_number) 被signal_number杀掉则为true
- _DEBUG_DEATH(statement, regex) 在Debug中 实际是调用 _DEATH,否则只是执行statement
死亡测试注意
- 可以在main中设置,也可以在用例中设置,用例完成会复原。
- testing::FLAGS_gtest_death_test_style = “fast”;
- testing::FLAGS_gtest_death_test_style = “threadsafe”;
- 不要在死亡测试用例释放内存,在父进程释放内存,不要在程序中使用内存堆检查
Gtest事件
- 全局事件
- 全局事件需要继承testing::Environment类,实现SetUp和TearDown,类似构造与析构,然后在main中使用testing::AddGlobalTestEnvironment进行注册
- TestSuite 每一组用例前后
- 需要继承testing::Test类,实现SetUpTestCase和TearDownTestCase,在该组用例前和结束执行
- TestCase 每个用例前后
- 同上,实现SetUp()和TearDown()即可,在每个用例前后执行
Gtest测试宏
TEST(test_suite_name,test_name)宏
一个测试特例,套件名和样例名,构成一个测试用例,不能有_,因为会将其设置为专有的类名
TEST_F(test_fixture,test_name)宏
结合testing::Test使用
TEST_P宏
配合继承testing::TestWithParam1
2
3
4
5
6
7
8
9
10
11
12
13
14template<typename T>
class TestWithParam:public Test,public WithParamInterface<T>{};
static const T& GetParam(){}
//内部的参数由友元类修改,所以Getparam()可以获得新属性
template<class TestClass> friend class internal::ParameterizedTestFactor;
INSTANTIATE_TEST_CASE_P(test_pre_name,继承TestWithParam的类名,testing::Values());
//其中第三个可以使用Range(begin,end[,step])
//Values(v1,v2...,vN)
//ValuesIn(container) and ValuesIn(begin,end) 从容器或者迭代器取
//Bool() true和false
//Combine(g1,g2,...,gN) 排列组合传入,参数是Tuple
模板参数化
1 | template <typename T> |
本文标题:GTest接口测试
文章作者:whppmy
发布时间:2023-03-04
最后更新:2022-09-04
原始链接:http://bugnull.com/无处安放/gtest接口测试/
版权声明:个人记录,没有获取同意时,禁止转载!!