Изменение ожидания Gmock

У меня есть модульный тест, который я хочу написать в 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);

Очевидно, не работает, так как ожидания стека.

1

Решение

Для чего-то подобного вы, вероятно, захотите установить два разных теста. Один для doSomethingи один для doSomethingElse, С другой стороны, если поведение второго зависит от первого, вы можете сделать что-то вроде:

{
MyMock mock;
EXPECT_CALL(mock, someFunctionCall(_)).Times(0);
doSomething(mock);
}
{
MyMock mock;
EXPECT_CALL(mock, someFunctionCall(_)).Times(1);
doSomethingElse(mock);
}

Проверка утверждений выполняется при уничтожении объекта, поэтому проверка каждого макета только для набора вызовов, для которого он необходим, будет проверять утверждения. Но на самом деле, я бы, вероятно, попытался разделить тестирование двух методов на отдельные тесты. Если у вас есть шаблонная настройка, которую вы не хотите повторять, вставьте ее в базовый класс, TEST_Fs происходят из.

1

Другие решения

Mock :: VerifyAndClearExpectations / Mock :: VerifyAndClear может использоваться для этих целей.

1

По вопросам рекламы [email protected]