11

プロジェクトで gmock を使用していますが、モック関数のカスタム参照変数を設定する際に問題が発生しました。次のようなクラスがあるとします。

class XXXClient {
public:
    void QueryXXX(const Request&, Response&);
}; 

class XXXRunner {
public:
    void DoSomething(XXXClient&);
};

XXXClient::QueryXXX を使用するクライアント クラス XXXRunner::DoSomething があり、XXXClient::DoSomething をテストするために XXXClient をモックしたいと考えています。

QueryXXX の 2 番目のパラメータ、つまり「Response」が戻り値ではなく、XXXClient::QueryXXX の Response にデータを入力する参照変数であるという問題が発生します。Response にカスタム データを設定して、XXXRunner::DoSomething のさまざまな条件を検証したいと考えています。

gmock フレームワークは期待される戻り値を設定できますが、「戻り変数」を設定する方法が見つかりませんか?

では、どうすればよいのでしょうか?

4

2 に答える 2

19

まず、モッククラスを作成します。次のようXXXClientに名前を付けましょう。XXXClientMock

class XXXClientMock : public XXXClient
{
public:
    MOCK_METHOD2(QueryXXX, QueryResult (Request&, Response&));
};

次に、GMock アクションSetArgRefereeを使用して、次のようにカスタム パラメータを設定します。

TEST(XXXRunnerTC, SetArgRefereeDemo)
{
    XXXCLientMock oMock;

    // set the custom response object
    Response oRsp;
    oRsp.attr1 = “…”;
    oRsp.attr2 = “any thing you like”;

    // associate the oRsp with mock object QueryXXX function
    EXPECT_CALL(oMock,  QueryXXX(_, _)).
        WillOnce(SetArgReferee<1>(oRsp));
    // OK all done

    // call QueryXXX
    XXXRunner oRunner;
    QueryResult oRst = oRunner.DoSomething(oMock);
    …

    // use assertions to verity your expectation
    EXPECT_EQ(“abcdefg”, oRst.attr1);
    ……
}

まとめGMock は、参照や値、ポインター、戻り値、カスタム モック関数の呼び出し (単純なテスト ロジック)
など、関数のモックを便利にする一連のアクションを提供します。詳細については、こちらを参照してください。SetArgRefereeSetArgPointeeReturnInvoke

楽しんでください:)ありがとう

于 2012-01-24T13:27:31.970 に答える
2

SetArgRefereeGoogle Mockチート シートを確認してください。

于 2012-01-13T16:05:11.847 に答える