2012-03-08 6 views
1

私は.NET 4.0でまだだと私はこのパターンが非同期ユニットテストの状況の様々な種類にもホールドアップするかどうかを疑問に思った:MsTest with Task.ContinueWith()and Task.Wait()...?

/// <summary> 
/// Noaa weather test: should read remote XML. 
/// </summary> 
[TestMethod] 
public void ShouldReadRemoteXml() 
{ 
    var uri = new Uri("http://www.weather.gov/xml/current_obs/KLAX.xml"); 
    var wait = HttpVerbAsyncUtility.GetAsync(uri) 
     .ContinueWith(
     t => 
     { 
      Assert.IsFalse(t.IsFaulted, "An unexpected XML read error has occurred."); 
      Assert.IsTrue(t.IsCompleted, "The expected XML read did not take place."); 

      if(t.IsCompleted && !t.IsFaulted) 
       FrameworkFileUtility.Write(t.Result, @"NoaaWeather.xml"); 
     }) 
     .Wait(TimeSpan.FromSeconds(7)); 

    Assert.IsTrue(wait, "The expected XML read did not take place within seven seconds."); 
} 

このTask.ContinueWith()...Task.Wait()パターンは現実の世界でホールドアップでしょうか?私は、ユニットテスト(特に非同期ユニットテスト)について正式に考えるのは比較的新しいので、基本的なことを思いとどまらないでください:)

+1

完全なソースコードを扱う最終的な解決策はありますか?多分、各スレッドの通知エラーのためのより複雑なサンプルであり、WaitAllの後に要約が表示されますか? – Kiquenet

+0

@Kiquenetあなたが求めているすべてのものは、箱から取り出してください。私はMSTestでの非同期サポートが存在しないと思うので、XUnitが代わりになるかもしれません[http://sravi-kiran.blogspot.com/2012/11/UnitTestingAsynchronousMethodsUsingMSTestAndXUnit.html] – rasx

答えて

10

ユニットテストフレームワークは通常、非同期コード、 awaitをC#とVisual Basicに追加しているので、私たちにとって大きな懸念事項です。

通常、テストメソッドが最初の「待機」に当たり、すぐに返されます。このテストでは、継続でエラーが生成されても、エラーなしで返されたため、成功したとマークされます。

私たちは、ユニットテストフレームワークプロバイダと協力して、今後のバージョンのVisual Studioのこの記事を改善していきます。 MSTestとXUnit.NETはVS 11 Betaで非同期メソッドを適切に処理できるようになりました。私の助言は:ahold of the VS 11 betaを取得し、その中で非同期ユニットテストのサポートを試してみてください。あなたがそれを好きではない場合、今give that feedback on the async forumには良い時間になります