c++ - 我尝试用 googlemock 模拟一个简单的 C++ 方法有什么问题?

标签 c++ unit-testing googlemock

根据 Patterns for unit testing a C++ method that makes a standard library call ,我正在测试驱动网络抽象类的开发。为了对调用标准 C 库(我无法模拟)来处理 BSD 套接字的单元测试代码,我定义了一个接口(interface) ISocket,我的实际实现 CSocket 和 mock MockSocket 继承。

现在我为 Network 类编写我的第一个单元测试,它使用 ISocket 来完成繁重的工作:

#include "gmock/gmock.h"
#include "gtest/gtest.h"
// C standard library includes omitted
#include "MockSocket.h"
#include "Network.h"

using ::testing::Return;
namespace JrStream {
  class NetworkTest : public ::testing::Test {
  protected:
    Network net;
    ISocket * socket_ptr;

    virtual void SetUp() {
      socket_ptr = new MockSocket();
    }
  };

  TEST_F(NetworkTest, InitCallsSocket) {
    EXPECT_CALL((MockSocket)*socket_ptr, Socket(AF_INET, SOCK_STREAM, 0))
        .Times(1)
        .WillOnce(Return(5)); //fake file descriptor

    ASSERT_TRUE(net.init(socket_ptr));
  }
} // namespace
// gtest boilerplate main() omitted

但是我在编译时遇到这个错误:

g++ -g -Wall -Lgtest-1.5.0/lib -Igmock-1.5.0/include -Igtest-1.5.0/include -I.. -I../../Debug/src -c -o NetworkTest.o NetworkTest.cc
NetworkTest.cc: In member function ‘virtual void JrStream::NetworkTest_InitCallsSocket_Test::TestBody()’:
NetworkTest.cc:35: error: no matching function for call to ‘JrStream::MockSocket::MockSocket(JrStream::ISocket&)’
MockSocket.h:16: note: candidates are: JrStream::MockSocket::MockSocket()
MockSocket.h:16: note:                 JrStream::MockSocket::MockSocket(const JrStream::MockSocket&)

这是我的界面和模拟的样子:

namespace JrStream {
  class ISocket {
    virtual int Socket(int domain, int type, int protocol) = 0;
  };
}

#include "gmock/gmock.h"
#include "ISocket.h"
namespace JrStream {
  class MockSocket: public JrStream::ISocket {
    MOCK_METHOD3(Socket, int(int domain, int type, int protocol));
  };
}

知道我在这里做错了什么吗?

最佳答案

看起来您正在 TestBody 中某处调用 MockSocket 的复制构造函数,而没有强制转换。

关于c++ - 我尝试用 googlemock 模拟一个简单的 C++ 方法有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5780747/

相关文章:

c++ - Negamax C++实现产生错误结果

python-3.x - 如何将python dict转换为DictRow对象

java - 使继承的 getter 返回模拟对象

unit-testing - IronPython是否支持Testoob进行单元测试?

c++ - 如何匹配通过引用传递给模拟函数的结构的字段?

c++ - 如何清除 C++ 中的动态数组以及堆栈中有多少?

c++ - C++中根据字符串创建对象

c++ - 使用 MINGW 并链接 CPLEX 库从 Linux 编译 Windows 可执行文件

c++ - 如何在 google mock for c 中自动生成 mock

c++ - Google Mocked 成员函数中的 std::pair 参数编译失败