Google Mock: несколько ожиданий для одной и той же функции с разными параметрами - PullRequest
7 голосов
/ 21 апреля 2011

Рассмотрим случай, когда определенная фиктивная функция должна вызываться несколько раз, каждый раз с различным значением определенного параметра.Я хотел бы подтвердить, что функция действительно вызывается один раз и только один раз для значения в определенном списке значений (например, 1,2,5).

С другой стороны, я бы хотел отказаться от определенияпоследовательность, которая задала бы определенный порядок, что является подробностью реализации, которую я хотел бы оставить свободной.

Есть ли какое-то совпадение или другое решение для этого случая?Я не уверен, влияет ли это каким-либо образом на решение, но я намерен использовать WillOnce (Return (x)) с другим значением x для каждого значения в списке выше.

Ответы [ 2 ]

10 голосов
/ 05 мая 2011

По умолчанию ожидания gMock могут быть удовлетворены в любом порядке (именно по той причине, о которой вы упомянули, чтобы не переусердствовать с вашими тестами).

В вашем случае вы просто хотите что-то вроде:

EXPECT_CALL(foo, DoThis(1));
EXPECT_CALL(foo, DoThis(2));
EXPECT_CALL(foo, DoThis(5));

И что-то вроде:

foo.DoThis(5);
foo.DoThis(1);
foo.DoThis(2);

будет соответствовать этим ожиданиям.

(В сторону: если вы действительно хотели ограничить порядок, вы должны использовать InSequence: https://github.com/google/googletest/blob/master/googlemock/docs/CookBook.md#expecting-ordered-calls)

0 голосов
/ 24 января 2018

Если вы ожидаете, что функция, DoThing, будет вызываться с множеством различных параметров, вы можете использовать следующий шаблон:

for (auto const param : {1, 2, 3, 7, -1, 2}{
    EXPECT_CALL(foo, DoThing(param));
}

Это особенно полезно, если ваш EXPECT_CALL включает в себя множество параметров, из которых изменяется только один, или если ваш EXPECT_CALL включает в себя много Action с, которые необходимо повторить.

...