【发布时间】:2017-11-30 06:46:13
【问题描述】:
我有如下功能:
FnCall(request, response);
请求和回复类型属于一类 - 消息。现在我已经模拟了如下方法:
class MessageMock : public Message
{
public:
MOCK_METHOD2(FnCall, bool(const Message* request, Message*& response));
};
在我的测试用例中,我期望调用 FnCall
EXPECT_CALL(mMessageMock, FnCall(::testing::_,::testing::_));
我的要求是在 MessageMock 类型的函数 FnCall 的请求/响应参数中设置一些虚拟值 - 我该如何设置?
================================================ =========================
我尝试了以下代码:
MessageMock MessageMock1, MessageMock2;
EXPECT_CALL(mMessageMock, FnCall(&mMessageMock1,
&mMessageMock2));
但收到编译错误,甚至尝试使用 const 声明:
error: no matching function for call to 'gmock_FnCall(MessageMock*, MessageMock*)'
note: candidate is:
note: testing::internal::MockSpec<bool(const Message*, Message*&)>&
note: no known conversion for argument 2 from 'MessageMock*' to 'const testing::Matcher<Message*&>&'
【问题讨论】:
-
您想比较函数的参数和一些期望值吗?
-
否 - 消息是一个抽象类,我想为请求/响应设置虚拟值 - 以便 FnCall 中的流会相应地运行
-
我认为您以错误的方式使用模拟。当你使用 mock 时,你会模拟一些接口并期望在那个 mock 上调用模拟方法。
-
是的,但是我们可以通过某种机制设置模拟方法函数参数 - 问题是我无法提供 Message 类型,因为它是一个抽象类,不确定如何将 MessageMock 转换为留言
-
但那是在函数调用者上。函数调用者将提供该参数。如果测试是函数调用者,则让测试提供虚拟对象来完成接口,如果不是,系统的其余部分需要提供具体对象。