web-dev-qa-db-ja.com

googleモック-同じモックオブジェクトでEXPECT_CALLを複数回呼び出すことはできますか?

EXPECT_CALL同じモックオブジェクトで2回同じTEST_F。 。 。何が起こるのですか?

期待はモックオブジェクトに追加されますか、それとも2番目の呼び出しは最初の呼び出しの効果を消去しますか?

私は After句 を見つけました。これは、同じモック+ EXPECT_CALLへの複数の呼び出しが許可されることを意味するようです。

11
Bob

から ForDummies

デフォルトでは、モックメソッドが呼び出されると、Google Mockは定義と逆の順序で期待値を検索し、引数に一致するアクティブな期待値が見つかったときに停止します(「新しいルールは古いものをオーバーライドするものと考えることができます。 ")。

次のファイルでは、2番目の期待値が2回一致し、最初の期待値はまったく一致しないため、テストTheSameArgumentsGoingToFailは失敗します。テスト 'DifferentArgumentsGoingToBeOk`はパスすることに注意してください。

#include <gmock/gmock.h>

using namespace ::testing;

struct SomeMock
{
    MOCK_CONST_METHOD1(foo, void(int));
};

TEST(Examples, TheSameArgumentsGoingToFail)
{
    SomeMock mock;

    EXPECT_CALL(mock, foo(4));
    EXPECT_CALL(mock, foo(4));

    mock.foo(4);
    mock.foo(4);
}

TEST(Examples, DifferentArgumentsGoingToBeOk)
{
    SomeMock mock;

    EXPECT_CALL(mock, foo(4));
    EXPECT_CALL(mock, foo(5));

    mock.foo(4);
    mock.foo(5);
}

同じパラメーターで複数の期待値を作成する場合は、いくつかの手法を使用できます( InSequence usageRetiresOnSaturation )。あまり必要ありません。

6
luantkow