1、简介
  gtest中,断言的宏可以理解为分为两类,一类是ASSERT系列,一类是EXPECT系列。
区别: 
ASSERT_* 系列的断言,当检查点失败时,退出当前函数(注意:并非退出当前案例)
EXPECT_* 系列的断言,当检查点失败时,继续往下执行。会在结果中输出期望值和实际值,也可在XML文件中输出
2、自定义信息输出
  对自动输出的出错信息不满意的话,你还可以通过操作符<<将一些自定义的信息输出。若不使用<<操作符自定义输出,在循环中查看不到当前的期望循环值,如:
  EXPECT_EQ(x[i], y[i]);
结果为: 
Actual: 4
Expected: x[i]
Which is: 3
使用<<操作符自定义输出,如:
EXPECT_EQ(x[i], y[i]) << "Vectors x and y differ at index " << i;
结果为:Actual: 4
Expected: x[i]
Which is: 3
Vectors x and y differ at index 2
3、布尔值
  ASSERT_TRUE(condition);	EXPECT_TRUE(condition);	条件是真
  ASSERT_FALSE(condition);	EXPECT_FALSE(condition);	条件是假
4、数值型数据检查
  ASSERT_EQ(expected, actual);	EXPECT_EQ(expected, actual);	判断== 
  ASSERT_NE(val1, val2);	EXPECT_NE(val1, val2);	判断 != 
  ASSERT_LT(val1, val2);	EXPECT_LT(val1, val2);	判断 < 
  ASSERT_LE(val1, val2);	EXPECT_LE(val1, val2);	判断 <= 
  ASSERT_GT(val1, val2);	EXPECT_GT(val1, val2);	判断 > 
  ASSERT_GE(val1, val2);	EXPECT_GE(val1, val2);	判断 >= 
5、字符串的检查
  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);			字符串的内容不同,忽略大小写
  *STREQ*和*STRNE*同时支持char*和wchar_t*类型的,*STRCASEEQ*和*STRCASENE*却只接收char*。
6、显示返回成功或失败
  直接返回成功:SUCCEED();
  返回失败:
    FAIL();	//不往下执行该案例
    ADD_FAILURE();	//继续往下执行
7、异常检查
ASSERT_THROW(statement, exception_type); EXPECT_THROW(statement, exception_type); 语句引发给定类型的异常
  ASSERT_ANY_THROW(statement);		EXPECT_ANY_THROW(statement);		语句引发任何类型的异常
  ASSERT_NO_THROW(statement);		EXPECT_NO_THROW(statement);		语句不引发任何异常
8、Predicate Assertions谓词断言
在使用EXPECT_TRUE或ASSERT_TRUE时,有时希望能够输出更加详细的信息,比如检查一个函数的返回值TRUE还是FALSE时,希望能够输出传入的参数是什么,以便失败后好跟踪。
  ASSERT_PRED1(pred1, val1);		EXPECT_PRED1(pred1, val1);		pred1(val1) 返回真
  ASSERT_PRED2(pred2, val1, val2);	EXPECT_PRED2(pred2, val1, val2);	pred2(val1, val2) 返回真
  ...				...				...
只提供<=5个参数的,如果需要测试更多的参数,直接告知。
8.1 自定义的输出格式
  ASSERT_PRED_FORMAT1(pred_format1, val1);`	EXPECT_PRED_FORMAT1(pred_format1, val1);	pred_format1(val1) 成功
  ASSERT_PRED_FORMAT2(pred_format2, val1, val2);	EXPECT_PRED_FORMAT2(pred_format2, val1, val2);	pred_format2(val1, val2) 成功
8.2 用法
1)定义1个信息
  testing::Message msg;
2)使用<<操作符定义信息
  msg << m_expr << " 和 " << n_expr << " 的最大公约数应该是:" << Foo(m, n) << " 而不是:" << k_expr;
3)返回 testing::AssertionFailure(msg);
4)在TEST宏中使用
  EXPECT_PRED_FORMAT3(AssertFoo, 3, 6, 2);
总的例子:
testing::AssertionResult AssertFoo(const char* m_expr, const char* n_expr, const char* k_expr, int m, int n, int k) {
    if (Foo(m, n) == k)
        return testing::AssertionSuccess();
    testing::Message msg;
    msg << m_expr << " 和 " << n_expr << " 的最大公约数应该是:" << Foo(m, n) << " 而不是:" << k_expr;
    return testing::AssertionFailure(msg);
}
TEST(AssertFooTest, HandleFail)
{
    EXPECT_PRED_FORMAT3(AssertFoo, 3, 6, 2);
}
9、浮点型检查
  ASSERT_FLOAT_EQ(expected, actual);	EXPECT_FLOAT_EQ(expected, actual);	两个浮点值几乎相等
  ASSERT_DOUBLE_EQ(expected, actual);	EXPECT_DOUBLE_EQ(expected, actual);	两个双精度值几乎相等
对相近的两个数的比较:
  ASSERT_NEAR(val1, val2, abs_error);	EXPECT_NEAR(val1, val2, abs_error);	val1和val2之间的差异不超过给定的绝对误差
还可使用:
  EXPECT_PRED_FORMAT2(testing::FloatLE, val1, val2);
  EXPECT_PRED_FORMAT2(testing::DoubleLE, val1, val2);
10、Windows HRESULT断言
  ASSERT_HRESULT_SUCCEEDED(expression);	EXPECT_HRESULT_SUCCEEDED(expression);	表达式返回的是成功的HRESULT
  ASSERT_HRESULT_FAILED(expression);		EXPECT_HRESULT_FAILED(expression);		表达式返回的是失败的HRESULT
11、类型检查
template <typename T> class FooType {
public:
    void Bar() { testing::StaticAssertTypeEq<int, T>(); }
};
TEST(TypeAssertionTest, Demo)
{
    FooType<bool> fooType;
    fooType.Bar();
}
来源:https://www.cnblogs.com/Sheenagh/p/12215179.html