Google Test的各种断言整理
[TOC]
本文对Google Test的各种断言整理.
从官网翻译整理.
布尔断言
Fatal | Nonfatal | 说明 |
---|---|---|
ASSERT_TRUE(condition) |
EXPECT_TRUE(condition) |
断言 condition 为 true |
ASSERT_FALSE(condition) |
EXPECT_FALSE(condition) |
断言 condition 为 false |
二进制断言
Fatal | Nonfatal | 说明 |
---|---|---|
ASSERT_EQ(expected, actual) |
EXPECT_EQ(expected, actual) |
断言两个数值相等 |
ASSERT_NE(val1, val2) |
EXPECT_NE(val1, val2) |
val1 != val2 |
ASSERT_LT(val1, val2) |
EXPECT_LT(val1, val2) |
val1 < val2 |
ASSERT_LE(val1, val2) |
EXPECT_LE(val1, val2) |
val1 <= val2 |
ASSERT_GT(val1, val2) |
EXPECT_GT(val1, val2) |
val1 > val2 |
ASSERT_GE(val1, val2) |
EXPECT_GE(val1, val2) |
val1 >= val2 |
说明:
- EQ:EQual
- NE:Not Equal
- LT:Less Than
- LE:Less Equal
- GT:Greater Than
- GE:Greater Equal
比较值都可以是任意编译器能识别的可比较类型,当然包括指针,但是注意空指针比较:使用EXPECT_EQ(
ptr
, nullptr)
而不是 EXPECT_EQ(
ptr
, NULL)
,这个规则对于其他比较类的断言也适用.
适用于字符串 std::string
.但不适用于C string,如果传入的值为C string的话只比较内存地址不比较实际值.
字符串断言
Fatal | Nonfatal | 说明 |
---|---|---|
ASSERT_STREQ(expected, actual) |
EXPECT_STREQ(expected, actual) |
两个C string相同 |
ASSERT_STRNE(str1, str2) |
EXPECT_STRNE(str1, str2) |
两个C string不相同 |
ASSERT_STRCASEEQ(exp, act) |
EXPECT_STRCASEEQ(exp, act) |
忽略大小写,两个C string相同 |
ASSERT_STRCASENE(str1, str2) |
EXPECT_STRCASENE(str1, str2) |
忽略大小写,两个C string不相同 |
不支持std::string
,如需要使用.c_str()
函数转成C类型的字符串格式.
浮点数断言
包括FLOAT
与DOUBLE
.
| Fatal | Nonfatal | 说明 |
| — | — | — |
| ASSERT_FLOAT_EQ(exp, act)
| EXPECT_FLOAT_EQ(exp, act)
| 两个float数值相等 |
| ASSERT_DOUBLE_EQ(exp, act)
| EXPECT_DOUBLE_EQ(exp, act)
| 两个double数值相等 |
| ASSERT_NEAR(val1, val2, abs_err)
| EXPECT_NEAR(val1, val2, abs_err)
| val1和val2的差距不超过abs_err |
一般使用NEAR
容错率更高.
异常断言
Fatal | Nonfatal | 说明 |
---|---|---|
ASSERT_THROW(stmt, exc_type) |
EXPECT_THROW(stmt, exc_type) |
stmt抛出了exc_type类型的异常 |
ASSERT_ANY_THROW(stmt) |
EXPECT_ANY_THROW(stmt) |
stmt抛出了任意类型的异常 |
ASSERT_NO_THROW(stmt) |
EXPECT_NO_THROW(stmt) |
stmt没有抛出异常 |
泛化断言(Generalized Assertion)
Fatal | Nonfatal | 说明 |
---|---|---|
EXPECT_THAT( value , matcher ) |
ASSERT_THAT( value , matcher ) |
value 是否与matcher 所规定的规则是否匹配 |
这个功能借助了built-in matchers
库.
查看既存的Matchers Reference.
自定义规则Writing New Matchers Quickly.
使用案例如下:
1 |
|
谓词断言(Predicate Assertions)
EXPECT_PRED*
EXPECT_PRED1(
pred
,
val1
)
EXPECT_PRED2(
pred
,
val1
,
val2
)
EXPECT_PRED3(
pred
,
val1
,
val2
,
val3
)
EXPECT_PRED4(
pred
,
val1
,
val2
,
val3
,
val4
)
EXPECT_PRED5(
pred
,
val1
,
val2
,
val3
,
val4
,
val5
)
ASSERT_PRED1(
pred
,
val1
)
ASSERT_PRED2(
pred
,
val1
,
val2
)
ASSERT_PRED3(
pred
,
val1
,
val2
,
val3
)
ASSERT_PRED4(
pred
,
val1
,
val2
,
val3
,
val4
)
ASSERT_PRED5(
pred
,
val1
,
val2
,
val3
,
val4
,
val5
)
pred
为谓词函数,valn
为函数的参数,最多支持五个参数.
1 | // 两数是否互为质数 |
失败的错误信息如下:
1 | MutuallyPrime(b, c) is false, where |
谓词函数不支持函数推断,因此对于重载函数以及模板函数必须显式指定
1 | //IsPositive有两个重载函数 |
EXPECT_PRED_FORMAT*
可以自定义错误信息输出的格式.
EXPECT_PRED_FORMAT1(
pred_formatter
,
val1
)
EXPECT_PRED_FORMAT2(
pred_formatter
,
val1
,
val2
)
EXPECT_PRED_FORMAT3(
pred_formatter
,
val1
,
val2
,
val3
)
EXPECT_PRED_FORMAT4(
pred_formatter
,
val1
,
val2
,
val3
,
val4
)
EXPECT_PRED_FORMAT5(
pred_formatter
,
val1
,
val2
,
val3
,
val4
,
val5
)
ASSERT_PRED_FORMAT1(
pred_formatter
,
val1
)
ASSERT_PRED_FORMAT2(
pred_formatter
,
val1
,
val2
)
ASSERT_PRED_FORMAT3(
pred_formatter
,
val1
,
val2
,
val3
)
ASSERT_PRED_FORMAT4(
pred_formatter
,
val1
,
val2
,
val3
,
val4
)
ASSERT_PRED_FORMAT5(
pred_formatter
,
val1
,
val2
,
val3
,
val4
,
val5
)
pred_formatter
是一个 predicate-formatter.
例子如下:
1 | // 返回最小公约数 |
失败的case的格式化打印如下:
1 | b and c (4 and 10) are not mutually prime, as they have a common divisor 2 |
类型断言(Type Assertions)
判断变量类型是否相同,用于类型测试以及类型参数测试.
1 | ::testing::StaticAssertTypeEq<T1, T2>(); |
注意保证模板类的成员函数或者一个模板函数,需要先实例化函数
1 | template <typename T> class Foo { |
死亡断言(Death Assertions)
Fatal | Nonfatal | 说明 |
---|---|---|
EXPECT_DEATH( statement , matcher ) |
ASSERT_DEATH( statement , matcher ) |
验证statement 因为非0 exit status 而产生的 stderr 是否匹配 matcher . |
EXPECT_DEATH_IF_SUPPORTED( statement , matcher ) |
ASSERT_DEATH_IF_SUPPORTED( statement , matcher ) |
如果系统支持死亡测试,则等同于EXPECT_DEATH ,否则等于空. |
EXPECT_EXIT( statement , predicate , matcher ) |
ASSERT_EXIT( statement , predicate , matcher ) |
在EXPECT_DEATH 基础上加入谓词函数定义statement 与matcher 的匹配过程. |
成败断言
Explicit Success and Failure
Fatal | Nonfatal | 说明 |
---|---|---|
SUCCEED() |
- | 只代表某一处的成败,不像RUN_ALL_TESTS 是全局的.暂时无用,不产生任何user-visible output. |
FAIL() |
ADD_FAILURE() |
生成错误 |
- | ADD_FAILURE_AT( file_path , line_number ) |
在指定文件的指定位置生成错误 |
Windows HRESULT Assertions
例子如下:
1 | CComPtr<IShellDispatch2> shell; |
Fatal | Nonfatal | 说明 |
---|---|---|
EXPECT_HRESULT_SUCCEEDED(expression) |
ASSERT_HRESULT_SUCCEEDED(expression) |
判断是HRESULT |
EXPECT_HRESULT_FAILED(expression) |
ASSERT_HRESULT_FAILED(expression) |
判断不是HRESULT |
Google Test的各种断言整理