#unit-testing #windows-phone-7 #event-handling #webclient
#модульное тестирование #windows-phone-7 #обработка событий #веб-клиент
Вопрос:
У меня есть некоторые запросы WebClient в моем приложении, и я хочу проверить синтаксический анализ полученных данных в модульном тестировании. Как мне дождаться в WP7 Silverlight UnitTestFramework события client_DownloadStringCompleted?
Ответ №1:
Мой подход к этому заключался в том, чтобы ввести класс-оболочку вокруг WebClient
(ну, я на самом деле использовал HttpWebRequest
в конце, как WebClient
и слишком много в потоке пользовательского интерфейса …) реализации интерфейса. Затем я мог бы создать FakeWebClient
реализацию IWebClient
, позволяющую мне проверять выбранные URL-адреса и отвечать на ошибки, случаи успеха и т.д. по желанию.
К сожалению, довольно много API-интерфейсов в .NET нелегко тестировать / подделывать: (
Ответ №2:
Здесь совершенно неправильный подход. Вы неправильно тестируете модуль.
То, что вы хотите сделать, это перенести ваш синтаксический анализ данных в другой класс и определить интерфейс, скажем:
interface IWebParser { MyResult Parse(string input); }
а затем внедрите это в свой класс и в своем DownloadStringCompleted
событии вызовите iWebParser.Parse(e.Result)
.
Теперь вы можете протестировать свои реализации IWebParser. И замените его.
Модульное тестирование не предназначено для тестирования кода, специфичного для конкретной реализации. С таким же успехом вы могли бы просто использовать средство доступа и протестировать частный метод!
Ответ №3:
Обычно вы не должны тестировать с помощью HTTP-запросов. Но для написания таких тестов в любом случае в конечном итоге вам поможет эта ссылка (асинхронное тестирование):