У меня есть два модульных теста, которые разделяют какое-то состояние (к сожалению, я не могу это изменить, так как нужно проверить обработку этого самого состояния).Как я могу сообщить GoogleMock о прекращении проверки ожидания после завершения теста?
TEST(MySuite, test1)
{
shared_ptr<MockObject> first(make_shared<MockObject>());
SubscribeToFooCallsGlobal(first);
EXPECT_CALL(*first, Foo(_));//.RetiresOnSaturation();
TriggerFooCalls(); // will call Foo in all subscribed
}
TEST(MySuite, test2)
{
shared_ptr<MockObject> second(make_shared<MockObject>());
SubscribeToFooCallsGlobal(second);
EXPECT_CALL(*second, Foo(_)).Times(1);
TriggerFooCalls(); // will call Foo in all subscribed
}
Если я запускаю тесты отдельно, оба они успешны. Если я запускаю их в test1 порядка, test2, я получаю следующее сообщение об ошибке в test2:
mytest.cpp(42): error: Mock function called more times than expected - returning directly. Function call: Foo(0068F65C) Expected: to be called once Actual: called twice - over-saturated and active
ожидание, которое не является один в test1. Вызов имеет место, но я хотел бы сказать GoogleMock не заботясь после завершения test1
(на самом деле, я хочу только проверить ожидания в тесте во время теста).
Я был под впечатлением, что RetiresOnSaturation
бы это сделать, но с ним я получаю:
Unexpected mock function call - returning directly. Function call: Foo(005AF65C) Google Mock tried the following 1 expectation, but it didn't match: mytest.cpp(42): EXPECT_CALL(first, Foo(_))... Expected: the expectation is active Actual: it is retired Expected: to be called once Actual: called once - saturated and retired
Что я должен признать, что меня смущает. Что это значит? Как я могу это решить?
'SubscribeToFooCallsGlobal (first);' - вы, вероятно, должны отказаться от подписки в конце каждого TC. – PiotrNycz
@PiotrNycz Конечно, но это обходное решение.Почему GoogleMock все еще проверяет вызов * после завершения теста? –
Поскольку глобальные переменные являются глобальными. И как таковые (эти глобальные перемены) являются болью в a * s, и никто и ничто (в том числе и gtest) не может правильно справиться с глобальными значениями – PiotrNycz