【仿RabbitMQ消息队列项目day4】GTest测试框架使用

一.什么是GTest?

GTest是一个跨平台的 C++单元测试框架,由google公司发布。gtest是为了在不同平台上为编写C++单 元测试而生成的。

二.使用

TEST(test_case_name, test_name):主要用来创建⼀个简单测试, 它定义了一个测试函数, 在这个函数中可以使⽤任何C++代 码并且使用框架提供的断言进行检查

TEST_F(test_fixture,test_name):主要用来进行多样测试,适用于多个测试场景如果需要相同的数据配置的情况, 即相同 的数据测不同的行为

1.宏断言

gtest的宏断言分为两类:

ASSERT_系列:如果当前点检测失败则退出当前函数 

EXPECT_系列:如果当前点检测失败则继续往下执行

// bool值检查
ASSERT_TRUE(参数),期待结果是true
ASSERT_FALSE(参数),期待结果是false
//数值型数据检查
ASSERT_EQ(参数1,参数2),传⼊的是需要⽐较的两个数 equal
ASSERT_NE(参数1,参数2),not equal,不等于才返回true
ASSERT_LT(参数1,参数2),less than,⼩于才返回true
ASSERT_GT(参数1,参数2),greater than,⼤于才返回true
ASSERT_LE(参数1,参数2),less equal,⼩于等于才返回true
ASSERT_GE(参数1,参数2),greater equal,⼤于等于才返回true
#include <iostream>
#include <gtest/gtest.h>
using std::cout;
using std::endl;

/*
    断言宏的使用 
        ASSERT_  断言失败则退出
        EXPECT_  断言失败继续运行
    注意:
        断言宏,必须在单元测试宏函数中使用
*/

//Test1是测试套件名称,greater和less是测试用例名称,测试套件Test1包含greater和less两个测试用例
TEST(Test1, greater)
{
    int age = 20;
    EXPECT_GT(age, 20);
    cout << "测试完毕" << endl; 
}

TEST(Test1, less)
{
    int age = 20;
    EXPECT_LE(18, 20);
    cout << "测试完毕" << endl;
}

TEST(Test2, greater)
{
    int age = 20;
    EXPECT_GT(age, 20);
    cout << "测试完毕" << endl; 
}

TEST(Test2, less)
{
    int age = 20;
    EXPECT_LE(18, 20);
    cout << "测试完毕" << endl;
}

int main(int argc, char* argv[])
{
    //将命令⾏参数传递给gtest
    testing::InitGoogleTest(&argc, argv);

    //运行所有测试
    RUN_ALL_TESTS();
    return 0;
}

2.事件机制

(1)什么是事件机制

测试框架:

GTest中的事件机制是指在整个测试的前和后,测试套件的前和后,以及测试用例的前和后,提供给用户自行添加操作的机制。

事件机制的最大好处就是,能够为我们的测试提前准备好测试环境,并在测试完毕后销毁环 境,使得测试更加灵活

(2)事件分类 

GTest提供的事件有以下三类:

全局事件:针对整个测试程序,整个测试前后会触发该事件

TestSuit(套件)事件:针对一个测试套件,测试套件测试前后会触发该事件

TestCase(用例)事件,针对一个测试用例,测试用例测试前后会触发该事件

 (3)事件的实现方法

GTest中的事件都是通过定义类中的方法来实现的,由于事件给测试提供了测试环境,我们不妨将这样的类叫做测试环境类。

实现全局事件——重写SetUp和TearDown

实现一个类,继承testing::Environment,然后重写SetUp和TearDown方法,最后在测试开始前调用testing::AddGlobalTestEnvironment方法注册该全局环境类。

实现TestSuit事件——实现SetUpTestCase(静态)TearDownTestCase(静态)

实现一个类,继承testing::Test,实现SetUpTestCase和TearDownTestCase静态方法。

注意:要使用TEST_F定义测试函数,测试套件名称必须和类名一致,这样才能将测试套件和环境类关联起来,环境类中定义的成员,测试函数中可以访问。

实现TestCase事件——重写SetUp和TearDown

在测试套件对应的测试环境类中,重写SetUp和TearDown方法。

#include <iostream>
#include <gtest/gtest.h>
#include <list>
using std::cout;
using std::endl;


class GlobalTestEnvironment : public testing::Environment
{
public: 
    virtual void SetUp() override
    {
        cout << "全局测试环境初始化" << endl;
    }
    virtual void TearDown() override
    {
        cout << "全局测试环境销毁" << endl;
    }
};

class ListTestSuit : public testing::Test
{
public:
    static void SetUpTestCase()
    {
        cout << "测试套件ListTestSuit测试环境初始化" << endl;
    }
    static void TearDownTestCase()
    {
        cout << "测试套件ListTestSuit测试环境销毁" << endl;
    }

    virtual void SetUp() override
    {
        _lt = {1, 2, 3, 4};
        cout << "测试用例的测试环境初始化" << endl;
    }

    virtual void TearDown() override
    {
        _lt.clear();
        cout << "测试用例的测试环境销毁" << endl;
    }
public:
    std::list<int> _lt;
};

//测试套件名称必须和类名保持一致
TEST_F(ListTestSuit, testcase1)
{
    _lt.push_back(5);
    ASSERT_EQ(5, _lt.back());
}

TEST_F(ListTestSuit, testcase2)
{
    _lt.push_back(6);
    ASSERT_EQ(1, _lt.front());
}

int main(int argc, char* argv[])
{
    //将命令⾏参数传递给gtest
    testing::InitGoogleTest(&argc, argv);

    //注册全局测试环境类
    testing::AddGlobalTestEnvironment(new GlobalTestEnvironment);

    //运行所有测试
    RUN_ALL_TESTS();
    return 0;
}

  • 25
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值