使用googletest

时间:2017-10-11 08:35:27

标签: c++ googletest

我的模拟测试有问题,下面是我的代码:

struct Interface
{  
virtual ~Interface() {};
virtual struct group *read() {
  return ::read();
 } 
};


class MockSocket: public Socket::Interface
{
public:
    MOCK_METHOD0(read, struct group *());
};

TEST_F(ConfiguredGrent, ReceivedcorrectStructure) 
{
   StrictMock<MockSocket> ms;
   struct group value;

    EXPECT_CALL(ms, read()).Times(1).
    WillOnce(Return(&value)).
    RetiresOnSaturation();
}

执行上面的代码时,它失败并出现以下错误:

/gmock-1.7.0/fused-src/gmock/gmock.h:11572:16: error: no matching function for call to 'MockSocket::MockSocket()'
   StrictMock() {

任何人都可以建议,我哪里出错了

1 个答案:

答案 0 :(得分:2)

您的示例与产生错误的代码不同。在为我们创建一个最小的示例时,您已设法删除了有趣的部分。

以下是可能产生错误的原因:

struct group{
};

struct Interface
{
  virtual ~Interface() {};
  virtual struct group *read() {
    return nullptr; // I added some dummy implementation instead of calling ::read but kept the interface non-pure virtual to keep it relevant
  }
};

class MockSocket: public Interface
{
public:
  MockSocket(int x){ (void) x; }
  MOCK_METHOD0(read, struct group *());
};

TEST(ConfiguredGrent, ReceivedcorrectStructure)
{
  StrictMock<MockSocket> ms;
  struct group value;

  EXPECT_CALL(ms, read())
    .Times(1)
    .WillOnce(Return(&value))
    .RetiresOnSaturation();
}

我通过添加不同的构造函数删除了默认构造函数,这是产生的错误:

error: no matching function for call to 'MockSocket::MockSocket()'
   StrictMock() {
                ^
note: candidate: MockSocket::MockSocket(int)
   MockSocket(int x){ (void) x; }
   ^

由于

StrictMock<MockSocket> ms;将调用默认的构造函数标识。