2014-07-24 42 views
0

比方說,我有一個這樣的模擬:如何驗證Google Mock中兩個char *是否相等?

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); 

回答

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); 
+0

謝謝I'e已經找到了解決方案,它是通過寫作我自己的匹配器:) –