GTest知识点

开始使用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
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值