我有一个简单的模拟类:
class MockCanInterface : public lib::CanInterface {
public:
MockCanInterface() : CanInterface({"mock"}) {}
MOCK_METHOD1(Write, bool(const lib::CanFrame& frame));
MOCK_METHOD1(Read, bool(lib::CanFrame* frame));
};
在测试代码中,我想将对象传递给Write
方法。有没有办法用.With
子句做到这一点?它适用于直接传递参数,但现在使用.With
。代码编译,但在执行期间失败 - 对象的大小是正确的,但数据不是。
这有效:
EXPECT_CALL(can_, Write(expected_command_))
.WillOnce(Return(true));
这不是:
EXPECT_CALL(can_, Write(_))
.With(Args<0>(expected_command_))
.WillOnce(Return(true));
我承认代码设置预期对象的方式可能会遗漏。
答案 0 :(得分:0)
我认为重点是:方法Write()需要通过引用传递的CanFrame参数。
我建议使用GMock提供的操作:
SetArgReferee
- 参考或价值
SetArgPointee
- 指针
您可以找到示例以及更多here
然而,这个解决方案对我有用,我也希望你;)
EXPECT_CALL(can_, Write(_))
.WillOnce(SetArgReferee<0>(expected_command_));
或带有返回值:
EXPECT_CALL(can_, Write(_))
.WillOnce(DoAll(SetArgReferee<0>(expected_command_), Return(true)));