1

假设我有一个这样的 Mock:

class MockSocket : public Socket
{
public:
    MOCK_METHOD1(Write, bool(Packet *p));
};

我想测试是否使用满足以下条件的对象调用 Write 方法:

  • 1) 当我在这个对象上调用 get_QL() 函数时,我收到 0 作为返回值
  • 2) 当我调用 get_MAC() 函数时,我收到一个 uint8_t*,我知道它的长度为 6,但没有字符串终止符。

如何在 GMock 中编写第二个条件?我尝试了类似的方法,但第二个属性无法正常工作。

EXPECT_CALL(ms, Write(AllOf(Property(&ESMCPacket::get_QL, 0), Property(&ESMCPacket::get_MAC, (mmac_source1))))).Times(1);
4

1 回答 1

2

我不确定 gMock 是否具有您需要的内存匹配器,但编写自定义匹配器很简单:

MATCHER_P2(MatchesMemory, data, size, "") {
  return memcmp(arg, data, size) == 0;
}

EXPECT_CALL(
    ms,
    Write(AllOf(Property(&ESMCPacket::get_QL, 0),
                Property(&ESMCPacket::get_MAC, MatchesMemory("abc\0ef", 6))))
    .Times(1);
于 2014-07-25T17:45:33.343 回答