2012-01-13 18 views
10

私のプロジェクトでgmockを使用していますが、モック関数のカスタム参照変数を設定する際に問題が発生しました。gmockでカスタムref-variableを設定する方法

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

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

がXXXClient :: QueryXXXを使用して、クライアントクラスXXXRunner :: doSomethingのある、と私はXXXRunner :: doSomethingのをテストするためにXXXClientをモックとしたい:次のように私はクラスがあるとし 。

「Response」であるQueryXXXの2番目のパラメータは戻り値ではなく、XXXClient :: QueryXXXのResponseにデータを入力する参照変数です。レスポンスのカスタムデータを設定して、XXXRunner :: DoSomethingのさまざまな状態を確認したいとします。

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

どうすればいいですか?

答えて

16

のは、以下のようXXXClientMockという名前を付けてみましょう、XXXClientモッククラスを作り、まず:

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アクションSetArgRefereeを使用し、

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

を次に
GMockには、などの機能をモックするのに便利な一連のアクションが用意されています210は参照用または値用、SetArgPointee用ポインタ、Return戻り用、Invoke呼び出し用のカスタムモック関数(単純なテストロジックを使用)、詳細はhereを参照してください。

お楽しみください:)

関連する問題