Gtest和Gmock使用指南 (7) - 桩掉C++类

有被测函数如下,该函数使用了一个接口类。我们测试的时候,这个接口类的实现是要用gmock打桩打掉的。

int FuncToBeTested(SomeInterface & if, std::string & param) {
    return if.some_func(param) == true ? 1 : -1;
}

接口类的定义如下:

class SomeInterface {
public:
    virtual bool some_func(std::string & some_param) = 0;
};

使用Gmock桩掉这个接口类的实现:

class MockInterfaceImpl : public SomeInterface {
public:
    MOCK_METHOD1(some_func, bool(std::string & param));
};

MOCK_METHOD1中的1表示桩掉的函数只有一个入参。

完整的示例代码如下:

$ cat Test.cpp 
#include <iostream>
#include <gtest/gtest.h>
#include <gmock/gmock.h>

class SomeInterface {
public:
    virtual bool some_func(std::string & param) = 0;
};

class MockInterfaceImpl : public SomeInterface {
public:
    MOCK_METHOD1(some_func, bool(std::string & param));
};

int FuncToBeTested(SomeInterface & interface, std::string param) {
    return interface.some_func(param) == true ? 1 : -1;
}

TEST(TestSuiteName, TestCaseName) {
    MockInterfaceImpl mock_if_impl;
    EXPECT_CALL(mock_if_impl, some_func)
    .Times(::testing::AtLeast(1))
    .WillOnce(::testing::Return(true));

    int ret_value = FuncToBeTested(mock_if_impl, "SomeString");

    EXPECT_EQ(ret_value, 1);
}
$ g++ Test.cpp -l gtest -l gtest_main -l gmock -l pthread && ./a.out
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 序言 要写出好的测试代码,必须精通相关的测试框架。对于Golang的程序员来说,至少需要掌握下面四个测试框架: G...
    _张晓龙_阅读 24,103评论 7 43
  • 序言 要写出好的测试代码,必须精通相关的测试框架。对于Golang的程序员来说,至少需要掌握下面四个测试框架: G...
    Aedan阅读 6,813评论 0 0
  • 序言 要写出好的测试代码,必须精通相关的测试框架。对于Golang的程序员来说,至少需要掌握下面四个测试框架: G...
    _张晓龙_阅读 39,112评论 3 48
  • 序言 要写出好的测试代码,必须精通相关的测试框架。对于Golang的程序员来说,至少需要掌握下面四个测试框架: G...
    _张晓龙_阅读 20,191评论 4 16
  • 什么是单元测试 单元测试是软件开发过程中的一种质量保证手段。最初的来源是想模仿对硬件芯片做单元测试那样,在软件中也...
    MagicBowen阅读 22,457评论 0 18