NSubstitute:能够在没有 return 类型的模拟方法中设置引用对象

NSubstitute: To be able to set the reference object in the mocked method that has no return type

我有一个接口声明如下:

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

我想模拟这个发送服务消息列表的方法,returns 消息类型列表。既然它是 void 类型那么我怎么能模拟这个方法。

我不想更改我的声明和定义。

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

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

谢谢,

来自 NSubstitute callbacks

上的文档

Returns() can be used to get callbacks for members that return a value, but for void members we need a different technique, because we can’t call a method on a void return. For these cases we can use the When..Do syntax

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);
}