2016-11-29 8 views
0

Я сопоставляю результат издевающегося слушателя в зависимости от типа получаемого события. Ожидание, которое я хочу определить, - «вы должны получать такой тип события один раз и утверждать следующее один раз. Любое другое событие для меня не имеет значения».Как убедиться, что совпадение EXPECT_CALL не увеличивает счетчик утверждения, если аргумент не соответствует?

Это утверждение я написал до сих пор

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

Теоретически мой слушатель должен получить два вызова. Одно событие :: Тип :: обработано и одно событие :: Тип :: сделано. Я явно не хочу «утверждать» что-либо об этом последнем. Кажется, что Matcher успешно сопоставит Event :: Type :: обработал, запустит WillOnce ... но скажет мне в конце теста, что мое ожидание Times (1) насыщено, потому что, хотя оно и не было 't соответствует второму событию (Event :: Type :: обработано), он все еще увеличивает общий счетчик этого ожидания ...

Это очень раздражает, я просто не могу найти свой путь вокруг него.
Излишне говорить, что 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