gtest使用例子

本文介绍使用gtest进行单元测试的方法,通过模拟加、减、乘、除四则运算接口的测试案例,展示了如何设置测试参数及预期结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近使用gtest进行单元测试,采用打桩的形式。关于gtest的详细说明就不多说了,网上的资料一大堆。主要讲解使用时的参数如何配置以及遇到的问题。下面的例子模拟是加、减、乘、除四则运算,前提是不知道加、减、乘、除四则运算是如何实现的。

编译命令自己根据实际情况进行搭建

#include <iostream>
#include <vector>
#include "gtest/gtest.h"
#include "gmock/gmock.h"
#include <string>

using namespace testing;
using namespace std;
//using ::testing::Return;
//using ::testing::ByRef;

class Operator   //要测试的接口分别是add()   sub() 
{
public:
    virtual int add(int x, int y) = 0;//加法
    virtual int sub(int x, int y) = 0;  //减法
    virtual int multi(int x, int y) = 0; //乘法
    virtual int divide(int x, int y) = 0; //除法
};

 

class MockOperator : public Operator {
public:
    MOCK_METHOD2(add, int(int x, int y));   //2代表add()有2个参数

int Operation::Add(Operator *op, int a, int b) {
    return op->add(a, b);
}

int Operation::Sub(Operator *op, int a, int b) {
    return op->sub(a, b);
}

int Operation::Multi(Operator *op, int a, int b) {
    return op->multi(a, b);
}

int Operation::Divide(Operator *op, int a, int b) {
    return op->divide(a, b);
}

TEST(OperatorTest, add) {
    MockOperator mock;

    int t = 13;

    EXPECT_CALL(mock, add(6, 7)).WillRepeatedly(Return(t));

    Operation op;
    EXPECT_EQ(13, op.Add(&mock, 6, 7));  //13 与 Add的结果进行比较
}

TEST(OperatorTest, sub) {
    MockOperator mock;

    int t = -1;

    EXPECT_CALL(mock, sub(6, 7)).WillRepeatedly(Return(t));  //设定返回值是t

    Operation op;
    EXPECT_EQ(-1, op.Sub(&mock, 6, 7));  //-1 与 Sub的结果进行比较
}

TEST(OperatorTest, multi) {
    MockOperator mockoperator;

    int t = 18;

    EXPECT_CALL(mockoperator, multi(2, 9)).WillRepeatedly(Return(t)); //设定返回值为t

    Operation op;
    EXPECT_EQ(18, op.Multi(&mockoperator, 2, 9));  //18 与 Multi的结果进行比较
}

TEST(OperatorTest, divide) {
    MockOperator mock;

    int t = 3;

    EXPECT_CALL(mock, divide(15, 5)).WillRepeatedly(Return(t)); //设定返回值为t

    Operation op;
    EXPECT_EQ(3, op.Divide(&mock, 15, 5));  //3 与 Divide()的结果进行比较
}

int main(int argc, char **argv) {
    std::cout << "start gtest" << endl;
    ::testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}
 

结果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值