2

繰り返し使用するよりも、複数の同一のアクションを設定するためのより適切で簡単な方法はありWillOnceますか?WillRepeatedlyたとえば、カーディナリティを持つ 方法はありますか?

WillOnceチェーンの後に単一のが続く可能性のある例のみを見つけることができますWillRepeatedly。これは、関数が呼び出された最初のN回に値を返し、最後に別の値を返したい場合、たとえばモックを使用する場合には理想的ではありません。次の例でobjを表し、N回ループさせるには:

while (obj.IsDone())
{
    SomeAction(obj.NextItem());
}
4

1 に答える 1

3

を使用できますTimes

// This is the final call
EXPECT_CALL(obj, IsDone())
  .WillOnce(Return(true));
// These are the intermediate calls
EXPECT_CALL(obj, IsDone())
  .Times(N)
  .WillRepeatedly(Return(false))
  .RetiresOnSaturation();

モックオブジェクトのメソッドは、呼び出された最初のNIsDoneはfalseを返します。その後、最新の期待に応えられるようになりますので、を使用して適用しないように指示します。後続のへの呼び出しは最初の期待値によって処理され、trueを返します。これ以上呼び出されると、テストは失敗します。RetiresOnSaturationIsDone

を省略した場合RetiresOnSaturation、2番目の期待値が引き続き適用されます。それはfalseを返し続け、「過飽和でアクティブな」期待が失敗していることを警告するメッセージが表示されます。

于 2013-02-13T22:50:45.170 に答える