NSubstitute:能够在mocked方法中设置没有返回类型的引用对象

时间:2015-04-22 00:55:34

标签: c# .net inversion-of-control nsubstitute

我有一个带有以下声明的界面:

void MapServiceMessages(IEnumerable<ServiceMessage> serviceMessages, List<Message> responseMessages);

我想模拟这个方法,我发送一个返回消息类型列表的servicemessage列表。由于它是void类型,那么我该如何模拟这个方法。

我不想改变我的宣言既不是定义。

当然我可以选择将void更改为List然后使用(...)。返回(mychoiceofmessages)....

我想与社区核实他们是否遇到过这样的问题和更好的解决方案。

谢谢,

1 个答案:

答案 0 :(得分:3)

来自NSubstitute callbacks

上的文档
  

Returns()可用于获取返回a的成员的回调   价值,但对于无效成员,我们需要一种不同的技术,因为我们   无法在void返回上调用方法。对于这些情况,我们可以使用   When..Do语法

public interface IFoo {
    void SayHello(string to);
}
[Test]
public void SayHello() {
    var counter = 0;
    var foo = Substitute.For<IFoo>();
    foo.When(x => x.SayHello("World"))
        .Do(x => counter++);

    foo.SayHello("World");
    foo.SayHello("World");
    Assert.AreEqual(2, counter);
}