2016-11-29 30 views
0

我根據接收到的事件類型匹配模擬偵聽器的結果。我想要定義的期望是「你應該接受這種類型的事件一次,並斷言一次,任何其他事件對我來說都不重要」。如何確保當參數不匹配時,EXPECT_CALL的匹配器不會增加斷言的計數器?

這是我到目前爲止

EXPECT_CALL(listener, changed(Field(&Event::type, Event::Type::processed)).WillOnce(/*Blablabla*/); 

理論上我的聽衆應該會收到兩個電話寫的斷言。一個Event :: Type :: processed和一個Event :: Type :: done。我明確地不想「斷言」關於後者的任何事情。看起來雖然Matcher會成功匹配Event :: Type :: processed,但會觸發WillOnce ...但在測試結束時會告訴我,我的期望Times(1)已飽和,因爲儘管它沒有不匹配第二個事件(Event :: Type :: processed),它仍然增加了這個期望的整體計數器...

這是超級討厭我只是無法找到它的方式。
不用說VerifyAndClear在這裏不會幫助,因爲這兩個事件在一次調用中發生,我不打算將它解耦,這對我的模型來說毫無意義。

回答

0
{ 
    testing::InSequence s; 
    EXPECT_CALL(listener, changed(Field(&Event::type, Event::Type::processed)).WillOnce(/*Blablabla*/); 
    EXPECT_CALL(listener, changed(_)).Times(testing::AnyNumber()); 
} 

應該爲你做竅門。

+0

真棒謝謝你!我感覺它也與序列有關,但最終這不是一件容易的事情。 – tbop