MsTest с Task.ContinueWith () и Task.Wait () ...? - PullRequest
1 голос
/ 09 марта 2012

Я все еще в .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 Ответ

10 голосов
/ 09 марта 2012

Фреймворки модульного тестирования обычно не очень хорошо работают из коробки с асинхронным кодом, что вызывает у нас большую обеспокоенность, так как мы добавляем await в C # и Visual Basic.

Обычно случается, что тестовый метод попадает в первое «ожидание», которое немедленно возвращается.Затем тест помечается как успешный, поскольку он вернулся без ошибок, даже если в продолжении будут возникать ошибки.

Мы работаем с поставщиками инфраструктуры модульного тестирования, чтобы улучшить эту историю для следующей версииVisual Studio. MSTest и XUnit.NET теперь правильно обрабатывают асинхронные методы в бета-версии VS 11. Мой совет: получите держитесь за бета-версию VS 11 и попробуйте в ней поддержку асинхронного модульного тестирования.Если вам это не нравится, сейчас будет отличным временем для дать этот отзыв на асинхронном форуме .

...