为 NSubstitute 中的每个 Returns() 返回一个新对象

sem*_*d3r 4 c# unit-testing nsubstitute

我创建了一个替代品,它为我的单元测试模拟了一个 Web 服务接口,其中包括以下方法定义:

public Message Invoke(Message input)
Run Code Online (Sandbox Code Playgroud)

使用以下方法调用此方法:

var reply = webService.Invoke(messageObject)
Run Code Online (Sandbox Code Playgroud)

当我多次调用同一个方法时,它抛出以下异常:

System.InvalidOperationException :此消息无法支持该操作,因为它已被读取。

这是我的 Nsubstitute 模拟代码:

outputMessageObj = GetResponseMessage()
wsMock.Invoke(Arg.Any<Message>()).Returns(outputMessageObj)
Run Code Online (Sandbox Code Playgroud)

如何确保每次调用时都返回一个新的 outputMessage 对象?

sem*_*d3r 5

明白了,只需使用 lambda 来调用一个方法,该方法每次都返回一个新的 Message 对象:

wsMock.Invoke(Arg.Any<Message>()).Returns(x => GetResponseMessage())
Run Code Online (Sandbox Code Playgroud)