ras*_*asx 1 .net c# mstest task-parallel-library
我仍然在.NET 4.0中,我想知道这种模式在各种异步单元测试情况下是否能够很好地保持:
/// <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.");
}
Run Code Online (Sandbox Code Playgroud)
这种Task.ContinueWith()...Task.Wait()模式会在现实世界中持续存在吗?我对正式考虑单元测试(特别是异步单元测试)比较新,所以请不要停留在基础知识上:)
Eri*_*ert 10
单元测试框架通常不能很好地与异步代码一起使用,这对我们来说非常重要,因为我们正在添加awaitC#和Visual Basic.
通常情况下,测试方法会遇到第一个"await",它会立即返回.然后将测试标记为已成功,因为它返回时没有错误,即使在继续中将产生错误.
我们正在与单元测试框架提供商合作,为即将推出的Visual Studio版本改进这个故事. MSTest和XUnit.NET现在可以在VS 11 Beta中正确处理异步方法.我的建议是:获得VS 11测试版并试用其中的异步单元测试支持.如果您不喜欢它,现在是在异步论坛上提供反馈的好时机.