2017-12-13 7 views
-1

現在、フロントエンド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 
     ... 
    } 

誰もが、我々は最高のこの問題を解決することができます方法についてのアドバイスがありますか?

答えて

1

私が正しく理解すれば、SendMessageはタスクを返すので、テストを進める前に待つことができます。

[TestMethod] 
public async Task Integration_Test_Example() 
{ 
    var request = CreateRequest(@"testfile.xml"); 
    var result = await target.SendMessage(request); 
} 
+0

他の非同期呼び出しを待つされていないawaitableようにテストを変更することができます。 –

+1

'SendMessage'はタスクを返します。なぜ' SendMessage'の中で 'await'を実行できないのですか? 'SendMessage'コードを表示できますか? – FCin

+1

@LeviSteenbergenしかし、あなたの実装が壊れているとは言えません。プロダクションでは、あなたもそのレースをしていますか? – Fildor

0

そのため、これが動作しない、

[TestMethod] 
    public async Task Integration_Test_Example() 
    { 
     // Arrange 
     ... 

     // Act 
     var request = CreateRequest(@"testfile.xml"); 
     await target.SendMessage(request); 

     // Assert 
     ... 
    } 
+0

もう1つの非同期コールが待たれていないので、これは動作しません –

+3

@LeviSteenbergenその後、**完全な例を挙げてください! – Fildor

関連する問題