基本数值类型的检查
一、环境信息
- Visual Studio 2019
- Windows 10
- 前导文档:gtest基础使用02
二、基本数值类型的检查
0. 测试的目标对象
- 测试的目标对象是Practice项目中的类Calc,配套的测试文档为Practice_gtest项目中的 ClassCalcTest.cpp
- 其中Calc.h的内容为
class Calc
{
public:
char name[10];
int Add(int a, int b);
int Minus(int a, int b);
int Multi(int a, int b);
float Divide(float a, float b);
};
- 其中Calc.cpp的内容为
#include "Calc.h"
int Calc::Add(int a, int b)
{
return a + b;
}
int Calc::Minus(int a, int b)
{
return a - b;
}
int Calc::Multi(int a, int b)
{
return a * b;
}
float Calc::Divide(float a, float b)
{
return a / b;
}
1. 数值型检查
- 对于数值型,EXPECT , ASSERT断言中可用的检查项包括:
(1) EQ : equal(预期值和实际值相等)
(2) NE : Not Equal(预期值和实际值不相等)
(3) LT : Less Than(预期值小于实际值)
(4) LE : Less than or equal to(预期值小于等于实际值)
(5) GT : Great than(预期值大于实际值)
(6) GE : Great than or equal to(预期值大于等于实际值)
具体示例和运行结果如下:
#include "pch.h"
#include "Calc.h"
Calc calculation;
TEST(CalcClassTest, addFuncTest) //数值比较
{
EXPECT_EQ(3,calculation.Add(1, 2)); //EQ: equal
ASSERT_NE(4,calculation.Add(2, 3)); //NE: not equal
EXPECT_LT(121, calculation.Add(100, 22)); //LT: Less Than
EXPECT_LE(201, calculation.Add(100, 101)); //LE: Less than or Equal to
EXPECT_LE(201, calculation.Add(100, 102));
EXPECT_GT(99, calculation.Add(80, 11)); //GT: Great Than
EXPECT_GE(88, calculation.Add(66, 21)); //GE: Great than or Equal to
EXPECT_GE(88, calculation.Add(66, 22));
}
2. 布尔值检查
对于布尔型,EXPECT , ASSERT断言中可用的检查项包括:
(1) TRUE,运行结果为True/非0
(2) FALSE,运行结果为False/0
TEST(CalcClassTest, minusFuncTest)
{
EXPECT_TRUE(calculation.Minus(10, 7));
ASSERT_FALSE(calculation.Minus(2, 3));
}
3. 字符串检查
对于字符串,EXPECT , ASSERT断言中可用的检查项包括:
(1) STREQ : string equal 比较的两个字符串是相同的
(2) STRNE : string not equal 比较的两个字符串不相同
(3) STRCASEEQ : string equal ignore case 忽略大小写,比较的两个字符串相同
(4) STRCASENE : string not equal ignore case 忽略大小写,比较的两个字符串不同
#include "pch.h"
#include "Calc.h"
Calc calculation;
TEST(StringTest, BasicTest)
{
strcpy(calculation.name,"Google Test");
EXPECT_STREQ("Google Test", calculation.name); //Expected=Goolge Test, Actual=Google Test
EXPECT_STRNE("CppUnit Test", calculation.name); //Expected=CppUnit Test,Actual=Google Test
strcpy(calculation.name, "CppUnit Test") ;
EXPECT_STRNE(calculation.name,"cppUnit Test"); //Expected=CppUnit Test, Actual=cppUnit Test
ASSERT_STRCASEEQ("cppunit test", calculation.name);//Expected=cppunit test,Actual=CppUnit Test
EXPECT_STRCASENE("gppunit test", calculation.name);//Expected=gppunit test,Actual=CppUnit Test
}
4. 浮点型检查
对于浮点型数据,可用的检查项是 FLOAT_EQ ,同时还可以通过 NEAR 设定误差范围。浮点型不能使用 EQ
#include "pch.h"
#include "Calc.h"
Calc calculation;
TEST(CalcClassTest, DivideFuncTest)
{
EXPECT_FLOAT_EQ(0.2, calculation.Divide(0.04, 0.2));
EXPECT_NEAR(0.01, calculation.Divide(0.03, 2), 0.01) << "Expected=0.01,Actual=0.015,ErrorRange=0.01";
EXPECT_EQ(0.2, calculation.Divide(0.04, 0.2)) << "Expected=0.2,Actual=0.2,so this is a pass case";
}
5. 自定义打印信息
可以通过 << 自定义打印信息,当case运行失败时,会打印这些自定义信息,以便进行问题的分析定位
#include "pch.h"
#include "Calc.h"
Calc calculation;
TEST(CustomOutputInfo, BasicTest)
{
ASSERT_EQ(6, calculation.Minus(7, 2))<<"Expected=5,Actual result should be 5,so this is a pass case";
}
6. EXPECT_* 与 ASSERT_*
- EXPECT 断言Fail后,同一TEST下的其后用例继续执行
TEST(CalcClassTest, addFuncTest) //数值比较
{
EXPECT_EQ(3, calculation.Add(1, 2)); //Pass
EXPECT_NE(5, calculation.Add(2, 3)); //Fail
EXPECT_LT(121, calculation.Add(100, 20)); //Fail
}
TEST(CalcClassTest, minusFuncTest)
{
EXPECT_EQ(-1, calculation.Minus(1, 2)); //Fail
}
- ASSERT 断言一旦Fail,同一TEST下的其后用例将不再执行,但是对其他的TEST不影响
TEST(CalcClassTest, addFuncTest) //数值比较
{
EXPECT_EQ(3, calculation.Add(1, 2)); //Pass
ASSERT_NE(5, calculation.Add(2, 3)); //Fail
EXPECT_LT(121, calculation.Add(100, 20)); //Fail
}
TEST(CalcClassTest, minusFuncTest)
{
EXPECT_EQ(-1, calculation.Minus(1, 2)); //Fail
}