gmock: изменение ожидания для аргументов метода (без verifyAndClearExpectations) - PullRequest
0 голосов
/ 15 октября 2019

В нашем проекте у нас есть большой фиктивный объект, содержащий сотни методов.
Это сгенерированный файл, и я ничего не могу с этим поделать. (И я знаю, что это довольно неправильный подход)

Я хочу написать тест, который ожидает, что некоторые из этих методов будут вызываться с разными аргументами:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...