単体テストの残りの部分に進む前に、タスクが完了していることを確認する必要があります。
しかし、それは別のメソッド内で待機しているタスクです (メソッドの単体テストを行っています)。
タスクを待機するか、task.Wait() を呼び出してみましたが、毎回テストが機能しません。
実際の方法は次のようになります。
private async void DoStuff(long idToLookUp)
{
IOrder order = await orderService.LookUpIdAsync(idToLookUp);
OtherStuff = false;
}
次のように単体テストを試みています。
[TestMethod]
public void TestDoStuff()
{
//+ Arrange
var lookupTask = Task<IOrderableTest>.Factory.StartNew(() => validOrder);
orderService.LookUpIdAsync(Arg.Any<long>()).Returns(lookupTask);
//+ Act
myViewModel.DoStuff();
await lookupTask;
//+ Assert
myViewModel.OtherStuff.Should().BeFalse();
}
それが失敗する方法は非常に役に立ちません。これにより、別のテストが「テストの実行中にエージェント プロセスが停止しました」で失敗します。(私が読むことができることは、テストの実行中にバックグラウンド スレッドが例外をスローしたことを意味します。)
そのため、その単体テストが完了するまでコードを待機させる方法を考えています。
私はかなり良いと思われるこの答えを見ました。ただし、メソッドの呼び出しを対象としています。私はそれを呼んでいません、私はただタスクしか持っていません。
注: ansyc パックを使用して .NET 4.0 をターゲットにしています。