开始使用Google C++ 测试框架
1、TREU_FALSE断言
致命断言 | 非致命断言 | 验证条件 |
---|
ASSERT_TRUE(condition); | EXPECT_TRUE(condition); | condition为真 | ASSERT_FALSE(condition); | EXPECT_FALSE(condition); | condition为假 |
ASSERT_*产生一个致命失败并从当前函数返回,而EXPECT_*产生一个非致命失败,允许函数继续运行。在两种情况下,一个断言失败都意味着它所包含的测试失效;
2、二值比较
致命断言 | 非致命断言 | 验证条件 |
---|
ASSERT_EQ(expected, actual); | EXPECT(expected, actual); | expected == actual | ASSERT_NE(val1, val2); | EXPECT_NE(val1, val2); | va1 != va2 | ASSERT_LT(val1, val2); | EXPECT_LT(val1, val2); | va1 < va2 | ASSERT_LE(va1, va2); | EXPECT_LE(va1, va2); | va1 <= va2 | ASSERT_GT(va1, va2); | EXPECT_GT(va1, va2); | va1 > va2 | ASSERT_GE(va1, va2); | EXPECT_GE(va1, va2); | va1 >= va2 |
- ASSERT_EQ()对指针进行的是指针比较:如果被用在两个c字符串上,它会比较他们是否指向同样的内存地址,而不是他们所指向的字符串是否有相同值。
- 如果想对两个字符串进行值比较,应使用ASSERT_STREQ()宏;验证一个字符串是否为空(NULL),应使用ASSERT_STREQ(NULL, c_string);但要比较两个string对象,应该使用ASSERT_EQ;
3、字符串比较
致命断言 | 非致命断言 | 验证条件 |
---|
ASSERT_STREQ(expected_str, actual_str); | EXPECT_STREQ(expected_str, actual_str); | 两字符串是否有相同的内容 | ASSERT_STRNE(str1, str2); | EXPECT_STRNE(str1, str2); | 两字符串是否有不同内容 | ASSERT_STRCASEEQ(expected_str, actual_str); | EXPECT_STRCASEEQ(expected_str, actual_str); | 两字符串是否有相同的内容,忽略大小写 | ASSERT_STRCASENE(str1, str2); | EXPECT_STRCASENE(str1, str2); | 两字符串是否有不同内容,忽略大小写 |
一个NULL指针和一个空字符串会被认为不同;
3、浮点对比断言
致命断言 | 非致命断言 | 验证条件 |
---|
ASSERT_FLOAT_EQ(val1, val2); | EXPECT_FLOAT_EQ(val1, val2); | 两个float近似相似,默认的是是指两者的差值在4ULP之内 | ASSERT_DOUBLE_EQ(val1, val2); | EXPECT_DOUBLE_EQ(val1, val2); | 两个double近似相似,默认的是是指两者的差值在4ULP之内 | ASSERT_NEAR(val1, val2, abs_error); | EXPECT_NEAR(val1, val2, abs_error); | 两者的差值在规定的范围内 |
4、函数参数化测试
简化了下面的博客记录学习 遇见gtest–函数参数化测试
使用: 1、创建一个子类继承testing::TestingWithParam,T为参数类型
class AddUpToTest : public testing::TestWithParam<unsigned> {
public:
AddUpToTest() {
n_ = GetParam();
}
protected:
unsigned n_;
};
2、 告诉GTest测试内容
TEST_P(AddUpToTest, Calibration) {
EXPECT_EQ(NaiveAddUpTo(n_), FastAddUpTo(n_));
}
3、测试范围 使用INSTANTIATE_TEST_CASE_P宏告诉gtest测试的参数范围
INSTANTIATE_TEST_CASE_P(
NaiveAndFase, // prefix:测试用例的前缀
AddUpToTest, // test_case_name:测试用例,为自定义的继承自testing::TestWithParam的类
testing::Range(1u, 100u) // generator:是testing::internal::ParamGenerator的类的
);
4、gtest提供的generator
| |
---|
Range(begin, end[, step]) | 范围在begin~end之间,步长为step,不包括end | Values(v1, v2, v3, …, vN) | v1,v2到vN的值 | Values(container) and Valuesln(begin, end) | 从一个C类型的数组或是STL容器,或是迭代器中取值 | Bool() | 取false和true两个值 | Combine(g1, g2, … ,gN) | 将g1,g2,…gN进行排列组合,g1,g2,… ,gN本身是一个参数生成器,每次分别g1,g2, … ,gN中各取一个值,组合成一个元组(Tuple)作为一个参数。 说明:这个功能只在提供了<tr1/truple>头的系统中有效。gtest会自动去判断是否支持tr/truple,如果系统确实支持,而gtest判断错误的话,可以去重新定义宏GTEST_HAS_TR1_TRUPLE=1 |
|