2013-03-06 10 views
8

私のテストでは、1つのオブジェクトを返すためのスタブと、別のオブジェクトを返すための次の呼び出しを最初に呼び出す必要があります。私はrecord()ブロック内の他のモックオブジェクトフレームワークでこれを見てきましたが、私はFakeItEasyでそれを行う方法を理解していません。 FakeItEasyは当店の必須フレームワークであり、私はAutoFixtureを使って偽物を生成しています。FakeItEasyから別のオブジェクトを返すA.CallTo()

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

すべてのヘルプは高く評価されます。

答えて

14

二つの方法、それらの一つは、あなたがあなた自身の答えに参照いずれかになります。

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

他の方法は次のとおりです。第二のアプローチで

A.CallTo(() => foo.Bar()).Returns(response2); 
A.CallTo(() => foo.Bar()).Returns(response1).Once(); 
+0

注文は、取得するために重要ですそれは働く – Fabio

7

もちろん、毎回発生します。投稿して数分以内に、私は自分の答えを見つけました。

私が使用して終了:

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

私はそれが望ましい方法だわからないんだけど、それは私のために素晴らしい作品。それを行うには

関連する問題