2013-03-06 10 views
8

제 테스트를 위해 하나의 객체를 반환하는 스텁과 다른 객체를 반환하는 다음 호출을 먼저 호출해야합니다. 나는 record() 블록의 다른 mock 객체 프레임 워크에서 이것을 보았지만, 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()).Returns(response2); 
A.CallTo(() => foo.Bar()).Returns(response1).Once(); 
+0

주문 점점 중요하다 작동한다. – Fabio

7

그리고 물론, 때마다 발생합니다. 게시 한 지 몇 분 만에 나는 혼자서 그 답을 찾는다.

나는 사용하여 종료 :

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

나는 그것이 선호되는 방법이다 모르겠지만, 나를 위해 잘 작동합니다.

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

다른 방법은 다음과 같습니다 :