gtest 基础语法,以及使用方式
1、EXPECT_TRUE EXPECT_TRUE(bool);
2、EXPECT_EQ EXPECT_EQ(b,3);
3、EXPECT_STREQ 字符串比较
EXPECT_STREQ(GetValueStr(),"TEST0") //期待GetValueStr返回值等于 字符串"TEST0"
4、EXPECT_FLOAT_EQ float类型数值比较,EXPECT_DOUBLE_EQ double类型数值比较 EXPECT_FLOAT_EQ(GetValueFloat(),3.1); //期待GetValueFloat 返回值等于3.1
5、EXPECT_NEAR 浮点数范围比较
EXPECT_NEAR(GetValueFloat(1),3.4,0.5);//期待函数返回值,在2.9和3.9之间 。
6、EXPECT_PRED1/2/3...(自定义判断函数,对函数的值进行测试)
EXPECT_PRED2 的下标是2,代表自定义的判定函数有2个参数。当自定义函数有3个 参数时,则用ASSERT_PRED3,以此类推。
// EXPECT_PRED2, 使用场景: 自定义判断函数 对函数进行的值进行测试
bool isGreaterThan10(short a ,short b)
{
return add(a,b)>=10;
}
TEST(HelloGtest, case_EXPECT_PRED2_success)
{
EXPECT_PRED2(isGreaterThan10,5,5);
}
示例(没有定义main函数,在库连接中配置链接gtest_main)
namespace {
class TestFunction : public ::testing::Test {
protected:
void SetUp() override {
// 在测试用例执行前的初始化操作
}
void TearDown() override {
// 在测试用例执行后的清理操作
}
};
} // namespace
// 定义测试用例
TEST_F(TestFunction, TestCase1) {
// 测试用例1的测试代码
ASSERT_EQ(1 + 1, 2);
}
TEST_F(TestFunction, TestCase2) {
// 测试用例2的测试代码
ASSERT_TRUE(true);
}
TestFunction
类是一个测试夹具,用于包含一组相关的测试用例。SetUp()
和TearDown()
方法分别在每个测试用例执行前和执行后被调用,用于初始化和清理测试环境。TEST_F(TestFunction, TestCase1)
和TEST_F(TestFunction, TestCase2)
是测试用例的定义,它们分别对应不同的测试场景。TestCase 名字根据可读性自己定义
- 在测试用例中,你可以使用 Google Test 提供的各种断言来验证测试的预期结果。
1、gtest 链接配置
项目工程-属性-连接器-输入-库依赖项
gtest gmock gtest_main gmock_main pthread
2、test项目环境配置(align为待测项目)
1、附加包含目录,将项目的头文件添加到附加包含目录中 ~/AlignProgram/include
2、附加依赖项,添加动态链接库 ~/AlignProgram/bin/x64/Debug/libalign.so
3、库依赖项,连接器中添加库依赖项 或者在这里配置也可以 align (2、3配一个项目就可以运行了
一个test suite包括一个或多个tests。可以将多个tests分组到test suite中,以此反映所测试代码的结构。当一个test suite中的多个tests需要共享一些通用对象和子程序时,可将其放入一个test fixture class。 一个test program可包含多个test suites.
同一个项目中的测试sample
int Factorial(int n); // 返回n的阶乘
使用TEST()来进行测试,这个函数的测试套件如下所示:
// 测试0的阶乘。
TEST(FactorialTest, HandlesZeroInput) {
EXPECT_EQ(Factorial(0), 1);
}
// 测试正数的阶乘。
TEST(FactorialTest, HandlesPositiveInput) {
EXPECT_EQ(Factorial(1), 1);
EXPECT_EQ(Factorial(2), 2);
EXPECT_EQ(Factorial(3), 6);
EXPECT_EQ(Factorial(8), 40320);
}
使用gtest时,需要编写断言(assertions),断言语句会检测条件是否为真。一个断言可存在三种结果:success(成功),nonfatal failure(非致命失败),或 fatal failure(致命失败)。当出现致命失败时,终止当前函数;否则程序继续执行。
Tests使用断言语句来检测代码的结果。如果一个test出现崩溃或有一个失败的断言,则该test是fails,否则是succeeds。
ASSERT_* 系列的断言,当检查点失败时,退出当前函数(注意:并非退出当前案例)。
EXPECT_* 系列的断言,当检查点失败时,继续往下执行。
如
Gmock简介
使用Mock类的一般流程如下:
定义Mock类:
首先,需要定义一个Mock类,该类继承自被模拟的类或接口,并重写其中的方法。在Mock类中,可以使用GMock提供的宏和函数来定义模拟方法的行为和期望。
创建Mock对象:
在测试用例中,创建Mock对象来代替实际的类或接口。可以使用NiceMock、StrictMock或者普通的Mock类来创建Mock对象,具体选择取决于测试的需求。
设置模拟方法的行为和期望:
使用GMock提供的宏和函数,设置模拟方法的行为和期望。可以指定方法的返回值、参数的期望值、调用次数等。
执行测试:
在测试用例中,调用被测试的代码,它会间接地调用Mock对象的方法。在这个过程中,GMock会记录Mock对象的方法调用,并根据设置的行为和期望进行处理。
验证模拟方法的调用情况:
使用GMock提供的断言函数,验证模拟方法的调用情况是否符合预期。可以检查方法的调用次数、参数的值等。
参考和分享链接
Gtest官方文档:GoogleTest User’s Guide | GoogleTest
关于Gmock这里有有一份比较清晰的文章:转一篇小亮同学的google mock分享 - welkinwalker - 博客园 (cnblogs.com)
Gtest和Gmock的github源码地址:GitHub - google/googletest: GoogleTest - Google Testing and Mocking Framework
版权归原作者 xiangxiang- 所有, 如有侵权,请联系我们删除。