Подтвердить что ты не робот

Обработка Async With Specflow для Silverlight

Silverlight Unit test Framework определяет процесс работы с вызовами Async (выведите тестовый класс из Microsoft.Silverlight.Testing.SilverlightTest, добавьте атрибут Asynchronous, используйте методы EnqueueXXX.) Учитывая разделение, которое SpecFlow представляет между тестовым классом и шаги:

  • Можно ли заставить эти инструменты ждать вызовов метода Silverlight в тесте, которые ведут себя асинхронно (например, при вызове веб-службы)?
  • Если они не могут, что такое руководство для обработки этого поведения в тестовых файлах SpecFlow? (Возможно, использовать AutoResetEvent, который сработал в обработчике событий и ждать на нем?)
4b9b3361

Ответ 1

Использование AutoResetEvent не будет работать, потому что вызов WaitOne блокирует поток пользовательского интерфейса. Silverlight использует поток пользовательского интерфейса даже при совершении асинхронных вызовов в службах передачи данных (см. Этот пост Thead заблокирован с использованием WebClient и ManualResetEvent), поэтому WaitOne фактически остановит вызов службы.

Ответ 2

Я думаю, что каждый, кто посмотрел на этот вопрос и поддержал этот вопрос, ждал, когда у кого-то будет отличный, элегантный ответ, но не похоже, что это произойдет здесь. Чтобы помочь другим, кому нужен полезный ответ, теперь...

То, что я сделал с другими ситуациями, связанными с тестированием модулей, - это использовать AutoResetEvent, как вы упомянули в вопросе:

AutoResetEvent MyAutoReset = new AutoResetEvent();
[TestMethod]
public void MyTestMethod()
{
   var MyItem.GetItem(x => 
      {
         // Return handler
         MyAutoReset.Set();
      });
   MyAutoReset.WaitOne(5000, false));
}

Очевидно, есть несколько вещей, которые следует учитывать при таком подходе, но он получает идею.

Ответ 3

Я знаю, что это, вероятно, поздно, но здесь.

Для асинхронных вызовов silverlight вы можете использовать Specflow AsyncContext api

https://github.com/techtalk/SpecFlow/wiki/Testing-Silverlight-Asynchronous-Code

Я писал об этом, когда он разрабатывался здесь

http://rburnham.wordpress.com/2011/05/13/testing-silverlight-asynchronous-code-with-specflow/

Это помогает объяснить концепцию.