【问题标题】:Return different objects from FakeItEasy A.CallTo()从 FakeItEasy A.CallTo() 返回不同的对象
【发布时间】:2013-02-21 14:15:31
【问题描述】:

对于我的测试,我需要第一次调用存根返回一个对象,然后调用下一次调用返回一个不同的对象。我在 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);

感谢任何帮助。

【问题讨论】:

    标签: unit-testing fakeiteasy


    【解决方案1】:

    有两种方法,其中一种是您在自己的答案中引用的方法:

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

    另一种方式是:

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

    【讨论】:

    • 第二种方法中的顺序对于使其正常工作很重要
    【解决方案2】:

    当然,它每次都会发生。在发布后的几分钟内,我自己就找到了答案。

    我最终使用了:

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

    我不确定它是否是首选方法,但它对我很有用。

    【讨论】:

      猜你喜欢
      • 2013-07-29
      • 2015-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-19
      相关资源
      最近更新 更多