8

私のテストでは、スタブの最初の呼び出しで 1 つのオブジェクトを返し、次の呼び出しで別のオブジェクトを返す必要があります。record() ブロックの他のモック オブジェクト フレームワークでこれを見たことがありますが、FakeItEasy でそれを行う方法がわかりませんでした。FakeItEasy は当店で義務付けられているフレームワークであり、AutoFixture を使用してフェイクを生成しています。

NextCallを見てみましたが、戻り値を指定できないようです。

これが私がやりたいことのアイデアです:

ReceiveMessageResponse queueResponse1 = fixture.Create<ReceiveMessageResponse>();
ReceiveMessageResponse queueResponse2 = fixture.Create<ReceiveMessageResponse>(seed);
A.CallTo(() => sqsClient.ReceiveMessage(null)).WithAnyArguments().Returns(queueResponse1);
//The following should happen the second time...
A.CallTo(() => sqsClient.ReceiveMessage(null)).WithAnyArguments().Returns(queueResponse2);

どんな助けでも大歓迎です。

4

2 に答える 2

17

それを行うには2つの方法があります。そのうちの1つは、自分の回答で参照するものです。

A.CallTo(() => foo.Bar()).ReturnsNextFromSequence(new[] { response1, response2 });

他の方法は次のとおりです。

A.CallTo(() => foo.Bar()).Returns(response2);
A.CallTo(() => foo.Bar()).Returns(response1).Once();
于 2013-03-07T19:12:40.997 に答える
7

そしてもちろん、それは毎回起こります。投稿してから数分以内に、私は自分で答えに出くわしました。

私は最終的に使用しました:

ReturnsNextFromSequence(new [] {queueResponse1, queueResponse2});

それが好ましい方法かどうかはわかりませんが、私にとってはうまく機能します。

于 2013-03-06T17:07:10.530 に答える