现在的位置: 首页 > 综合 > 正文

玩转Google开源C++单元测试框架Google Test系列(gtest)之二 – 断言

2012年08月19日 ⁄ 综合 ⁄ 共 1794字 ⁄ 字号 评论关闭

原文链接:http://www.cnblogs.com/coderzh/archive/2009/04/06/1430364.html


一、前言

这篇文章主要总结gtest中的所有断言相关的宏。 gtest中,断言的宏可以理解为分为两类,一类是ASSERT系列,一类是EXPECT系列。一个直观的解释就是:

1. ASSERT_* 系列的断言,当检查点失败时,退出当前函数(注意:并非退出当前案例)。 

2. EXPECT_* 系列的断言,当检查点失败时,继续往下执行。

二、示例

// int型比较,预期值:3,实际值:Add(1, 2)
EXPECT_EQ(3, Add(12))
// 

 

假如你的Add(1, 2) 结果为4的话,会在结果中输出:

g:\myproject\c++\gtestdemo\gtestdemo\gtestdemo.cpp(16): error: Value of: Add(12)

  Actual: 
4

Expected:
3

如果是将结果输出到xml里的话,将输出:(关于将结果输出为xml,见:http://www.cnblogs.com/coderzh/archive/2009/04/10/1432789.html

复制代码

<testcase name="Demo" status="run" time="0" classname="AddTest">

      
<failure message="Value of: Add(1, 2)
  Actual: 4 Expected: 3"
 type=""><![CDATA[g:\myproject\c++\gtestdemo\gtestdemo\gtestdemo.cpp:16

Value of: Add(1, 2)

  Actual: 4

Expected: 3
]]></failure>
</testcase>

复制代码

 

如果你对自动输出的出错信息不满意的话,你还可以通过操作符<<将一些自定义的信息输出,通常,这对于调试或是对一些检查点的补充说明来说,非常有用!

下面举个例子:


如果不使用<<操作符自定义输出的话: 

for (int i = 0; i < x.size(); ++i) 

{

    EXPECT_EQ(x[i], y[i])
;

}



看到的结果将是这样的,你根本不知道出错时 i 等于几:

g:\myproject\c++\gtestdemo\gtestdemo\gtestdemo.cpp(25): error: Value of: y[i]

  Actual: 
4

Expected: x[i]

Which 
is3

 

如果使用<<操作符将一些重要信息输出的话:

for (int i = 0; i < x.size(); ++i)

{

    EXPECT_EQ(x[i], y[i]) 
<< "Vectors x and y differ at index " << i;

}


从输出结果中就可以定位到在 i = 2 时出现了错误。这样的输出结果看起来更加有用,容易理解: 

g:\myproject\c++\gtestdemo\gtestdemo\gtestdemo.cpp(25): error: Value of: y[i]

  Actual: 
4

Expected: x[i]

Which 
is3

Vectors x and y differ at index 
2

 

三、布尔值检查

Fatal assertion Nonfatal assertion Verifies
ASSERT_TRUE(condition); EXPECT_TRUE(condition); condition is true
ASSERT_FALSE(condition); EXPECT_FALSE(condition); condition is false

 

四、数值型数据检查

Fatal assertion Nonfatal assertion Verifies
ASSERT_EQ(expectedactual); EXPECT_EQ(expectedactual); expected == actual
ASSERT_NE(val1val2); EXPECT_NE(val1val2); val1 != val2
ASSERT_LT(val1val2); EXPECT_LT(val1val2); val1 

抱歉!评论已关闭.