В нашем проекте у нас есть большой фиктивный объект, содержащий сотни методов.
Это сгенерированный файл, и я ничего не могу с этим поделать. (И я знаю, что это довольно неправильный подход)
Я хочу написать тест, который ожидает, что некоторые из этих методов будут вызываться с разными аргументами:
EXPECT_CALL(mock, foo(VAL_1)).Times(AtLeast(1));
...
EXPECT_CALL(mock, foo(VAL_2)).Times(AtLeast(1));
...
EXPECT_CALL(mock, foo(VAL_3)).Times(AtLeast(1));
Дело в том, что в одно времядолжен быть только один допустимый вход для метода. Как мне это сделать без использования VerifyAndClearExpectations
? (Я хочу сохранить некоторые другие ожидания для разных методов на одной и той же макете).
Я думаю, что могу добиться этого с дополнительными ожиданиями следующим образом:
EXPECT_CALL(mock, foo(_).Times(0);
EXPECT_CALL(mock, foo(VAL_1)).Times(AtLeast(1));
...
EXPECT_CALL(mock, foo(_).Times(0);
EXPECT_CALL(mock, foo(VAL_2)).Times(AtLeast(1));
...
EXPECT_CALL(mock, foo(_).Times(0);
EXPECT_CALL(mock, foo(VAL_3)).Times(AtLeast(1));
Это правильно? подход или я что-то упустил? Что если приведенный выше код будет выполнен в цикле из тысячи циклов? Эти ожидания относятся к какому-то стеку, который я в конечном итоге потреблю, или EXPECT_CALL(mock, foo(_).Times(0);
волшебным образом очистит все ожидания выше?
Может быть, мне не стоит бояться использовать VerifyAndClearExpectations
и просто написать несколько тестов вместо одногокоторый выполняет очень похожие (даже одинаковые) сценарии, но проверяет разные ожидания? В текущем сценарии у меня есть некоторые ожидания, которые должны быть действительны в течение всего теста, и некоторые из них будут меняться несколько раз так, как я описал выше.
Существуют ли какие-либо хорошие документы / рекомендации по работе с такими и другими сложными ситуациями с использованием GMock? Я не нашел, что это документация полезна для определения, когда я должен использовать определенные механизмы gmock.