現在、フロントエンドAPI呼び出しをテストする統合テストがあります。呼び出しは非同期なので、結果が期待どおりのものと比較できるようになるまで呼び出しを強制します。統合テストはThread.Sleepでのみ動作します
しかし、コードには、待機していない別の非同期呼び出しも含まれているという問題があります。そこで、非同期呼び出しをネストしました。これには、テストが成功することがあり、時には失敗する(競合状態)という原因もあります。
ここでは、Thread.Sleep(10000)をコードに追加して問題を修正しました。しかし、これは良い解決策ではありません。
コードは次のように好き:
[TestMethod]
public void Integration_Test_Example()
{
// Arrange
...
// Act
var request = CreateRequest(@"testfile.xml");
var task = target.SendMessage(request);
Thread.Sleep(10000); // dirty fix
task.Wait();
// Assert
...
}
誰もが、我々は最高のこの問題を解決することができます方法についてのアドバイスがありますか?
他の非同期呼び出しを待つされていないawaitableようにテストを変更することができます。 –
'SendMessage'はタスクを返します。なぜ' SendMessage'の中で 'await'を実行できないのですか? 'SendMessage'コードを表示できますか? – FCin
@LeviSteenbergenしかし、あなたの実装が壊れているとは言えません。プロダクションでは、あなたもそのレースをしていますか? – Fildor