Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 从fakeitesy A.CallTo()返回不同的对象_Unit Testing_Fakeiteasy - Fatal编程技术网

Unit testing 从fakeitesy A.CallTo()返回不同的对象

Unit testing 从fakeitesy A.CallTo()返回不同的对象,unit-testing,fakeiteasy,Unit Testing,Fakeiteasy,对于我的测试,我需要对存根的第一次调用返回一个对象,下一次调用返回另一个对象。我已经在record()块中的其他模拟对象框架中看到了这一点,但我还没有弄清楚如何在FakeiTasy中实现这一点。FakeiTesy是我们商店的强制框架,我正在使用AutoFixture生成假货 我查看了NextCall,但看起来无法指定返回值 以下是我想做的事情: ReceiveMessageResponse queueResponse1 = fixture.Create<ReceiveMessageResp

对于我的测试,我需要对存根的第一次调用返回一个对象,下一次调用返回另一个对象。我已经在record()块中的其他模拟对象框架中看到了这一点,但我还没有弄清楚如何在FakeiTasy中实现这一点。FakeiTesy是我们商店的强制框架,我正在使用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);
ReceiveMessageResponse queueResponse1=fixture.Create();
ReceiveMessageResponse queueResponse2=fixture.Create(种子);
A.CallTo(()=>sqsClient.ReceiveMessage(null)).WithAnyArguments().Returns(queueResponse1);
//第二次应该发生以下情况。。。
A.CallTo(()=>sqsClient.ReceiveMessage(null)).WithAnyArguments().Returns(queueResponse2);

感谢您的帮助。

当然,每次都是这样。在发布后的几分钟内,我自己找到了答案

我最终使用了:

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

我不确定这是否是首选方法,但它对我来说非常有用。

有两种方法可以做到这一点,其中一种就是您在自己的答案中提到的方法:

A.CallTo(() => foo.Bar()).ReturnsNextFromSequence(new[] { response1, response2 });
另一种方式是:

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

第二种方法中的顺序对于让它工作很重要