1
私はNS代理店を初めて利用しています。 2番目の配置が最初の配置の呼び出しを引き起こし、それが "行為"の前であっても失敗するため、テストは失敗します。私は同じ方法で複数の取り決めをするべきかどうかはわかりません。しかし、パラメータが一致しないので、最初のアレンジを呼び出すべきではないという気がします。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を変更したり、後で変更したり、より多くのロジックをコールバックに入れたりすることで、この問題を回避してください。または、Do Do構文が役立つかどうかを確認してください。 –
David、詳細をつけて質問を更新しました – Serguzest