Task.WhenAll呼び出しに渡すタスクがいくつかあります。私のテストでは例外をスローする最初のタスクを設定していますが、Tasks.WhenAllへの呼び出しはすべてのタスクで完了せず、例外がスローされたときにすぐに破損します。私の前提はすべてのタスクが完了し、 Tasks.WhenAllへの呼び出しが行われるので、Moqは非同期例外と非同期例外を区別することができません。Moq Task.WhenAllの呼び出しでタスクの1つで非同期例外をスローする
私はすべてのタスクを実行できるようにしたいと思うし、それらのすべてが完了したら、フォールトされたタスクをつかみ、その例外を抽出してそれに応じて行動したいと思います。私の実装は正しいですか?MOQは対処できませんか、実装を修正する必要がありますか?問題はモックではありませんか?プロセッサ
FirstProcessor.Setup(x => x.StartAsync(It.IsAny<TextWriter>())).Throws(new Exception("some exception happened."));
SecondProcessor.Setup(x => x.StartAsync(It.IsAny<TextWriter>())).Returns(Task.FromResult(default(object)));
注:代わりに、
Task.FromException
を使用Task.FromExceptionは、.NET Frameworkの4.6で公開されているし、以前のバージョンで – ChrisM@ChrisMをこのように使用することはできません:真。古いバージョンの場合は、 'TaskCompletionSource'と' SetException'を使う必要があります。 –