2012-03-07 29 views
3

私はGmockをメソッド呼び出しに使用し、QListの要素heightsFromCsvResultをoutパラメータとして返します。ここで、現在の作業コードである:googlemock内のアクションにメソッドパラメータを渡す

EXPECT_CALL(*_mockAttributeRepository, getGeometryHeightValues(_,_)) 
    .WillOnce(DoAll(SetArgReferee<1>(heightsFromCsvResult.at(0)), Return(true))) 
    .WillOnce(DoAll(SetArgReferee<1>(heightsFromCsvResult.at(1)), Return(true))) 
    .WillOnce(DoAll(SetArgReferee<1>(heightsFromCsvResult.at(2)), Return(true))) 
    .WillOnce(DoAll(SetArgReferee<1>(heightsFromCsvResult.at(3)), Return(true))); 

getGeometryHeightValues(int lineNumber, QPair<QString, QString>) 

から第1のパラメータLINENUMBERはheightsFromCsvResult.at(行番号)のインデックスです。

今私はより一般的な方法でGmockを使用しよう:mockLineNumberはGmockによって書き込まれることはありませんので、

int* mockLineNumber = new int; 
EXPECT_CALL(*_mockAttributeRepository, getGeometryHeightValues(_,_)) 
    .Times(4) 
    .WillRepeatedly(DoAll(SaveArg<0>(mockLineNumber), SetArgReferee<1>(heightsFromCsvResult.at(*(mockLineNumber))), Return(true))); 

しかし、このコードは動作しません。しかし、EXPECT_CALLは満たされています。

コード内の問題は誰にも見えますか?同じEXPECT_CALLSaveArgで設定した変数を使用して

答えて

4

が動作していないようです、あなたが代わりに行うことができますことは、インデックスのよう引数0を使用して第二引数を設定カスタムアクションを通過することです渡されたコンテナ。

ACTION_P(SetArg1WithValueFromPassedArgumentUsingArg0AsIndex, param) 
{ 
    arg1 = param.at(arg0); 
} 

int* mockLineNumber = new int; 
EXPECT_CALL(*_mockAttributeRepository, getGeometryHeightValues(_,_)) 
    .Times(4) 
    .WillRepeatedly(DoAll(SaveArg<0>(mockLineNumber), SetArg1WithValueFromPassedArgumentUsingArg0AsIndex(heightsFromCsvResult), Return(true))); 

あなたが何か他のもののためにmockLineNumberを必要とする場合を除き、あなたはその部分を削除することができます。

関連する問題