首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >gmock可以用于存根C函数吗?

gmock可以用于存根C函数吗?
EN

Stack Overflow用户
提问于 2015-08-13 21:02:27
回答 6查看 28K关注 0票数 19

我是gmock的新手,所以我想知道如何将在被测函数中调用的简单C函数存根以进行单元测试。

示例:

代码语言:javascript
运行
复制
int func(int a)
{
  boolean find;
  // Some code
  find = func_1();
  return find;
}

我搜索过gmock,在我的理解中,gmock没有提供存根简单的C函数的功能,因此我想问一下gmock是否提供了模拟或存根func_1的功能

如果没有,我如何在不更改源代码的情况下手动在测试代码中存根func_1?我正在使用google测试框架进行单元测试。

谢谢。

EN

Stack Overflow用户

发布于 2015-08-28 23:30:01

最近我发现自己也遇到了同样的情况。我必须为用C编写的库编写单元测试,这反过来又依赖于同样用C编写的其他库,所以我想使用gmock模拟所有依赖项的函数调用。让我用一个例子来解释我的方法。

假设要测试的代码(库A)调用另一个库lib_x_function()中的函数

代码语言:javascript
运行
复制
lib_a_function()
{
   ...
   retval = lib_x_function();
   ...
}

因此,我想模拟X库。因此,我在文件lib_x_mock.h中编写了一个接口类和一个模拟类

代码语言:javascript
运行
复制
class LibXInterface {
public:
   virtual ~LibXInterface() {}
   virtual int lib_x_function() = 0;
}

class LibXMock : public LibXInterface {
public:
   virtual ~LibXMock() {}
   MOCK_METHOD0(lib_x_function, int());
}

另外,我创建了一个源文件(比如lib_x_mock.cc),它为实际的C函数定义了一个存根。这将调用mock方法。注意对模拟对象的extern引用。

代码语言:javascript
运行
复制
#include lib_x.h
#include lib_x_mock.h
extern LibXMock LibXMockObj;    /* This is just a declaration! The actual
                                   mock obj must be defined globally in your
                                   test file. */

int lib_x_function()
{
    return LibXMockObj.lib_x_function();
}

现在,在测试库A的测试文件中,我必须全局定义模拟对象,以便它既可以在测试中访问,也可以从lib_x_mock.cc访问。这是lib_a_tests.cc:

代码语言:javascript
运行
复制
#include lib_x_mock.h

LibXMock LibXMockObj;  /* This is now the actual definition of the mock obj */

...
TEST_F(foo, bar)
{
   EXPECT_CALL(LibXMockObj, lib_x_function());
   ...
}

这种方法非常适合我,我有几十个测试和几个模拟的库。但是,我对创建全局模拟对象是否可以有一些疑问-我在separate question中提出了这个问题,并仍然在等待答案。除此之外,我对这个解决方案很满意。

更新:有关全局对象的问题可以通过创建对象来轻松解决,例如,在测试夹具的构造函数中创建对象,并将指向该对象的指针存储在全局变量中。

然而,也请注意我对这个问题的另一种回答,我刚刚发布了这个问题。

票数 24
EN
查看全部 6 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31989040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档