MsTest与Task.ContinueWith()和Task.Wait()......?

时间:2012-03-08 22:06:11

标签: c# .net 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.");
}

这个Task.ContinueWith()...Task.Wait()模式会在现实世界中持续存在吗?我是正式考虑单元测试(特别是异步单元测试)的新手,所以请不要停留在基础知识上:)

1 个答案:

答案 0 :(得分:10)

单元测试框架通常不能很好地与异步代码一起使用,这对我们非常关注,因为我们正在向C#和Visual Basic添加await

通常会发生的情况是测试方法遇到第一个“await”,它会立即返回。然后将测试标记为已成功,因为它返回时没有错误,即使将在延续中产生错误。

我们正在与单元测试框架提供商合作,为即将推出的Visual Studio版本改进这个故事。 MSTest和XUnit.NET现在可以在VS 11 Beta中正确处理异步方法。我的建议是:获取ahold of the VS 11 beta并尝试其中的异步单元测试支持。如果你不喜欢它,现在是give that feedback on the async forum的好时机。