单元测试: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
  1. 关于Gmock这里有有一份比较清晰的文章:转一篇小亮同学的google mock分享 - welkinwalker - 博客园 (cnblogs.com)
  1. Gtest和Gmock的github源码地址:GitHub - google/googletest: GoogleTest - Google Testing and Mocking Framework
  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值