У меня есть модульный тест, который я хочу написать в GMock. Тем не менее, мое знакомство в первую очередь с Mockito. То, что я написал бы в Мокито:
Mockito.verify(mock, Mockito.never()).someFunctionCall(Matchers.<String>any());
doSomething(mock);
Mockito.verify(mock, Mockito.times(1)).someFunctionCall(Matchers.<String>any());
doSomethingElse(mock);
Что соответствует проверке того, что doSomething
никогда не вызывает someFunctionCall
но вызывается ровно один раз doSomethingElse
,
Как бы я сделал то же самое с GMock?
EXPECT_CALL(mock, someFunctionCall(_)).Times(0);
doSomething(mock);
EXPECT_CALL(mock, someFunctionCall(_)).Times(1);
doSomethingElse(mock);
Очевидно, не работает, так как ожидания стека.
Для чего-то подобного вы, вероятно, захотите установить два разных теста. Один для doSomething
и один для doSomethingElse
, С другой стороны, если поведение второго зависит от первого, вы можете сделать что-то вроде:
{
MyMock mock;
EXPECT_CALL(mock, someFunctionCall(_)).Times(0);
doSomething(mock);
}
{
MyMock mock;
EXPECT_CALL(mock, someFunctionCall(_)).Times(1);
doSomethingElse(mock);
}
Проверка утверждений выполняется при уничтожении объекта, поэтому проверка каждого макета только для набора вызовов, для которого он необходим, будет проверять утверждения. Но на самом деле, я бы, вероятно, попытался разделить тестирование двух методов на отдельные тесты. Если у вас есть шаблонная настройка, которую вы не хотите повторять, вставьте ее в базовый класс, TEST_F
s происходят из.
Mock :: VerifyAndClearExpectations / Mock :: VerifyAndClear может использоваться для этих целей.