9

特定のモック関数が、特定のパラメーターの異なる値で毎回呼び出されることが予想される場合を考えてみましょう。関数が実際に、特定の値のリスト (1,2,5 など) の値ごとに 1 回だけ呼び出されたことを検証したいと思います。

一方、特定の順序を決定するシーケンスを定義することは控えたいと思います。これは、私が自由に保ちたい実装の詳細です。

この場合、ある種のマッチャーまたは他の解決策はありますか?

これが何らかの形でソリューションに影響を与えるかどうかはわかりませんが、上記のリストの値ごとに異なる x で WillOnce(Return(x)) を使用するつもりです。

4

2 に答える 2

14

デフォルトでは、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);

それらの期待に応えます。

(余談: 順序を制限したい場合は https://github.com/google/googletest/blob/master/googlemock/docs/cook_book.md#expecting-ordered-calls-orderedcalls を使用する必要があります)InSequence

于 2011-05-05T15:03:18.720 に答える
3

関数DoThingが多数の異なるパラメーターで呼び出されることが予想される場合は、次のパターンを使用できます。

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

EXPECT_CALLこれは、多くのパラメーターが含まれていてそのうちの 1 つだけが変更される場合、または繰り返さEXPECT_CALLれる多くの が含まれている場合に特に役立ちます。Action

于 2018-01-24T16:18:46.167 に答える