Обработка Async With Specflow для Silverlight
Silverlight Unit test Framework определяет процесс работы с вызовами Async (выведите тестовый класс из Microsoft.Silverlight.Testing.SilverlightTest, добавьте атрибут Asynchronous, используйте методы EnqueueXXX.) Учитывая разделение, которое SpecFlow представляет между тестовым классом и шаги:
- Можно ли заставить эти инструменты ждать вызовов метода Silverlight в тесте, которые ведут себя асинхронно (например, при вызове веб-службы)?
- Если они не могут, что такое руководство для обработки этого поведения в тестовых файлах SpecFlow? (Возможно, использовать AutoResetEvent, который сработал в обработчике событий и ждать на нем?)
Ответы
Ответ 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/
Это помогает объяснить концепцию.