web-dev-qa-db-ja.com

gmock EXPECT_CALL()への引数を検査する方法は?

初めてGoogleMock(gMock)を使用しています。次のコードスニペットがあるとします。

_class LinkSignals
{
    public:
        virtual ~LinkSignals() { }

        virtual void onLink(std::string) = 0;
        virtual void onUnLink() = 0;
};


class MockLinkSignals : public LinkSignals
{
    public:
        MOCK_METHOD1(onLink, void(std::string));
        MOCK_METHOD0(onUnLink, void());
};
_

_MockLinkSignals mock_signals;_

EXPECT_CALL(mock_signals, onLink(_))を実行させるテストコードを実行する場合、onLink()の引数を調べるにはどうすればよいですか?

9
Chimera

通常は、既存のgmockマッチャーを使用するか、独自に定義して、mockメソッドに渡される引数をチェックします。

たとえば、デフォルトのEq等式マッチャーを使用します。

EXPECT_CALL(mock_signals, onLink("value_I_expect"))

または、部分文字列を確認してください。

EXPECT_CALL(mock_signals, onLink(HasSubstr("contains_this")))

Gmockのドキュメントには、使用可能な標準マッチャーの詳細が記載されており、整数引数タイプなどのカスタムマッチャーの作成方法も説明されています。

MATCHER(IsEven, "") { return (arg % 2) == 0; }

期待値にアクションを付加することで変数への引数をキャプチャすることができますが、これは期待値のスコープでの使用が制限される可能性があります。

EXPECT_CALL(mock_signals, onLink(_)).WillOnce(SaveArg<0>(pointer))

特定のケースに最適なアプローチを選択する前に、利用可能なさまざまなマッチャーとアクションを検討することをお勧めします。

16
pticawr