Gtest入门介绍
简单使用:
//test function
int getdata(int n,int m)
{
return n+m;
}
TEST(getdata, demon)
{
EXPECT_EQ(1,1); // 等于
EXPECT_NE(1,2); //不等于
EXPECT_LE(1,2); // 小于等于
EXPECT_LT(getdata(1,-1),2); //小于
EXPECT_GT(getdata(1,2),1); //大于
EXPECT_GE(getdata(1,2),1); //大于等于
EXPECT_TRUE(1!=2); //判断true
EXPECT_FALSE(1==2); //判断true
}
int main(int argc, char **argv)
{
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
复杂条件判断:
尽管 googletest 有一组丰富的断言,但它们永远不会是完整的,因为预测用户可能遇到的所有场景是不可能的(也不是一个好主意)。因此,有时用户不得不使用EXPECT_TRUE()检查一个复杂的表达式,因为缺少一个更好的宏。这样做的问题是没有向您显示表达式部分的值,因此很难理解出了什么问题。作为一种解决方法,一些用户选择自己构建失败消息,将其流式传输到EXPECT_TRUE(). 但是,这很尴尬,尤其是当表达式具有副作用或评估成本很高时。
googletest 为您提供了三种不同的选项来解决此问题:
-
使用现有的布尔函数
如果您已经有一个返回的函数或仿函数bool(或可以隐式转换为的类型bool),您可以在谓词断言中使用它来免费打印函数参数 bool Factorial(int n,int m) { return (n+m)>5; } TEST(judage,demon1) { EXPECT_PRED2(Factorial,3,1); }
-
使用返回 AssertionResult 的函数
testing::AssertionResult IsEven(int data ) { if ((data % 2) == 0) return testing::AssertionSuccess(); else return testing::AssertionFailure() << data << "%2!=0"; } int datavalue(int data) { // do something return data*data; } TEST(getdata, demon2) { EXPECT_TRUE(IsEven(10)); EXPECT_TRUE(IsEven(datavalue(5))); }
字符串比较
TEST(getdata, demon2)
{
cout<<"str compare"<<endl;
EXPECT_STREQ("1234","1234"); //等于
EXPECT_STRNE("1234","12345"); //不等于
EXPECT_STRCASEEQ("qwer","QWER"); //忽略大小写等于
EXPECT_STRCASENE("qwer","QWERq"); //忽略大小写不等于
}