1
我是NSubstitute的新手。測試失敗,因爲第二種安排引起第一種安排,甚至在「行爲」之前使其失敗。我不確定我是否應該以同樣的方法作出多重安排。但我覺得不管怎樣,不應該先調用第一種安排,因爲參數不匹配。與NSubstitute使用同一方法是否允許多種安排?
public interface IMediator
{
Task<TResponse> Send<TResponse>(IRequest<TResponse> request, CancellationToken cancellationToken = default(CancellationToken));
Task Send(IRequest request, CancellationToken cancellationToken = default(CancellationToken));
Task Publish<TNotification>(TNotification notification, CancellationToken cancellationToken = default(CancellationToken))
where TNotification : INotification;
}
public class MyMessage : IRequest<MyResponse> {}
public class MyResponse {}
public class MyMessage2 : IRequest<MyResponse> {}
[Fact]
public async Task Mock_Fail() {
var mediatr = Substitute.For<IMediator>();
var myMessage = new MyMessage();
var myMessage2 = new MyMessage();
var myResponse = new MyResponse();
var myResponse2 = new MyResponse();
mediatr.Send(Arg.Any<MyMessage>())
.Returns((ci) => {
Assert.Same(myMessage, ci[0]); //That fails
return myResponse;
});
mediatr.Send(Arg.Any<MyMessage2>())
.Returns((ci) => {
return myResponse2;
});
//Execution never reaches here
var response = await mediatr.Send(myMessage);
var response2 = await mediatr.Send(myMessage2);
}
我也會這樣做,但測試是爲了證明NSubstitute的行爲。重構它以環繞該問題沒有意義:) – Serguzest
您是否有更現實的問題示例?沒有更多的上下文很難提出建議。一般來說,通過更改順序來避免這個問題,最糟糕的情況是使用閉包/ Func,稍後可以更改或者將更多邏輯放入回調中。或者查看When Do語法是否可以提供幫助。 –
David,我用更多的細節更新了我的問題 – Serguzest