блокировка при запуске в обычном режиме, но не во время модульных тестов (StoreAsync) - PullRequest
1 голос
/ 13 марта 2012

У меня проблема здесь, когда во время модульных тестов возвращается метод StoreAsync ().При запуске без отладки он, кажется, никогда не возвращается, хотя это и асинхронный метод.

Что дает?

   DataWriter writer = new DataWriter(_client.OutputStream);
   writer.WriteBytes(payload);
   await writer.StoreAsync(); // <--- returns only during unit test
   writer.DetachStream();

1 Ответ

0 голосов
/ 13 марта 2012

Если вы используете VS 11 Beta, убедитесь, что ваш тестовый модуль объявлен как async Task.

Если вы используете VS 11 Dev Preview, используйте Async Unit Testsпроект от CodePlex.

У меня есть больше информации об асинхронных модульных тестах в моем блоге ( часть 1 , часть 2 ).В итоге:

  1. Когда await нужно (асинхронно) ждать, он планирует продолжение и возвращается к своему вызывающему.
  2. MSTest видит возврат метода теста, не видит никакогоисключения и помечает его как «пройденный».
  3. Позже StoreAsync будет завершен, а остальная часть метода будет запущена (в потоке пула потоков, не в контексте этого модульного теста).

VS 11 Beta добавляет первоклассную поддержку async Task методов модульного тестирования.Таким образом, второй шаг, описанный выше, отличается: MSTest видит возврат метода тестирования, но не знает, считать его завершенным, пока не завершится Task.

Проект асинхронных модульных тестов использует другой подход: он применяет асинхронный контекст длякаждый метод модульного теста в [AsyncTestClass].Этот асинхронный контекст ожидает завершения всех асинхронных операций (включая async void методы) перед завершением модульного теста.

...