4

QList heightsFromCsvResult の要素を出力パラメーターとして返すメソッド呼び出しに Gmock を使用します。現在動作しているコードは次のとおりです。

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)));

からの最初のパラメータ lineNumber

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

heightsFromCsvResult.at(lineNumber) のインデックスです。

ここで、より一般的な方法で Gmock を使用してみます。

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

しかし、mockLineNumber は Gmock によって作成されることはないため、このコードは機能しません。しかし、EXPECT_CALL は満たされています。

コードに問題がある人はいますか?

4

1 に答える 1

5

同じEXPECT_CALL内で SaveArg で設定された変数を使用しても機能していないようです。代わりに、渡されたコンテナーのインデックスとして引数 0 を使用して 2 番目の引数を設定するカスタム アクションを実行することができます。

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が必要でない限り、その部分を削除できます。

于 2012-03-07T13:42:41.047 に答える