C# 在NSubstitute中为每个Returns()返回一个新对象

C# 在NSubstitute中为每个Returns()返回一个新对象,c#,unit-testing,nsubstitute,C#,Unit Testing,Nsubstitute,我已经为我的单元测试创建了一个模拟web服务接口的替代品,其中包括以下方法定义: public Message Invoke(Message input) 使用以下方法调用此方法: var reply = webService.Invoke(messageObject) 当我多次调用同一个方法时,它会引发以下异常: System.InvalidOperationException:此消息无法支持该操作,因为它已被读取 以下是我的Nsubstitute模拟代码: outputMessageOb

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

public Message Invoke(Message input)
使用以下方法调用此方法:

var reply = webService.Invoke(messageObject)
当我多次调用同一个方法时,它会引发以下异常:

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

以下是我的Nsubstitute模拟代码:

outputMessageObj = GetResponseMessage()
wsMock.Invoke(Arg.Any<Message>()).Returns(outputMessageObj)
outputMessageObj=GetResponseMessage()
wsMock.Invoke(Arg.Any()).Returns(outputMessageObj)

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

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

wsMock.Invoke(Arg.Any<Message>()).Returns(x => GetResponseMessage())
wsMock.Invoke(Arg.Any()).Returns(x=>GetResponseMessage())

如果要按顺序返回特定值,可以将要返回的所有值传递给
Returns
方法<代码>wsMock.Invoke(null).ReturnsForAnyArgs(response1,response2,response3)