Как я могу проверить, равны ли два символа * в Google 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);

person Roxana Istrate    schedule 24.07.2014    source источник


Ответы (1)


Я не уверен, есть ли в 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);
person VladLosev    schedule 25.07.2014
comment
Спасибо, я уже нашел решение, написав свой собственный сопоставитель :) - person Roxana Istrate; 26.07.2014