我的模拟测试有问题,下面是我的代码:
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() {
任何人都可以建议,我哪里出错了
答案 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;
将调用默认的构造函数标识。