NSubstitute を使用して、タスクを返すメソッドでスローされている例外をどのように模倣しますか?
メソッドのシグネチャが次のようになっているとします。
Task<List<object>> GetAllAsync();
NSubstituteのドキュメントが、非voidの戻り値型の例外をスローするように模倣するように言っているのは次のとおりです。しかし、これはコンパイルされません:(
myService.GetAllAsync().Returns(x => { throw new Exception(); });
それで、これをどのように達成しますか?
これはうまくいきました:
using NSubstitute.ExceptionExtensions;
myService.GetAllAsync().Throws(new Exception());
実際、受け入れられた回答は、スローされている同期例外を模倣しています。これはrealasync
の動作ではありません。モックする正しい方法は次のとおりです。
_var myService = Substitute.For<IMyService>();
myService.GetAllAsync()
.Returns(Task.FromException<List<object>>(new Exception("some error")));
_
このコードとGetAllAsync()
があるとしましょう
_try
{
var result = myService.GetAllAsync().Result;
return result;
}
catch (AggregateException ex)
{
// whatever, do something here
}
_
catch
はReturns(Task.FromException>()
でのみ実行され、同期的に例外をスローするため、受け入れられた回答では実行されません。
これは私のために働いたものです:
myService.GetAllAsync().Returns(Task.Run(() => ThrowException()));
private List<object> ThrowException()
{
throw new Exception();
}