0


单元测试:Gtest 和Gmock

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。

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

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

Gmock简介

使用Mock类的一般流程如下:

  1. 定义Mock类:

    首先,需要定义一个Mock类,该类继承自被模拟的类或接口,并重写其中的方法。在Mock类中,可以使用GMock提供的宏和函数来定义模拟方法的行为和期望。

  2. 创建Mock对象:

    在测试用例中,创建Mock对象来代替实际的类或接口。可以使用NiceMock、StrictMock或者普通的Mock类来创建Mock对象,具体选择取决于测试的需求。

  3. 设置模拟方法的行为和期望:

    使用GMock提供的宏和函数,设置模拟方法的行为和期望。可以指定方法的返回值、参数的期望值、调用次数等。

  4. 执行测试:

    在测试用例中,调用被测试的代码,它会间接地调用Mock对象的方法。在这个过程中,GMock会记录Mock对象的方法调用,并根据设置的行为和期望进行处理。

  5. 验证模拟方法的调用情况:

    使用GMock提供的断言函数,验证模拟方法的调用情况是否符合预期。可以检查方法的调用次数、参数的值等。

参考和分享链接

  1. Gtest官方文档:GoogleTest User’s Guide | GoogleTest

  2. 关于Gmock这里有有一份比较清晰的文章:转一篇小亮同学的google mock分享 - welkinwalker - 博客园 (cnblogs.com)

  3. Gtest和Gmock的github源码地址:GitHub - google/googletest: GoogleTest - Google Testing and Mocking Framework

标签: 单元测试 log4j

本文转载自: https://blog.csdn.net/weixin_43881088/article/details/134203933
版权归原作者 xiangxiang- 所有, 如有侵权,请联系我们删除。

“单元测试:Gtest 和Gmock”的评论:

还没有评论