开始使用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