Устройства тестирования HTTP-обработчиков?
Мой текущий проект, основанный на Asp.net, широко использует обработчики Http для обработки различных запросов? Итак, есть ли способ, с помощью которого я могу проверить функциональность каждого из обработчиков, используя случаи unit test? Мы используем инфраструктуру Nunit и Moq для облегчения тестирования модулей.
Ответы
Ответ 1
Я думаю, что эти записи в блоге с течением времени актуальны:
http://www.kongsli.net/nblog/2009/05/03/aspnet-35-improving-testability-with-systemwebabstractions/
http://www.kongsli.net/nblog/2009/05/28/testability-with-systemwebabstractions-and-no-mock-framework/
См. пример # 2 в первом сообщении для примера о том, как unit test HttpHandler.
Ответ 2
Если вы не заботитесь об модульных тестах и хотите что-то быстрое и грязное, вы можете использовать Fiddler
если вы хотите использовать более интегрированный подход (модульное тестирование), вы можете использовать WebRequest и WebResponse.
Ответ 3
Вы уверены, что, хотя я не сделал себя "в гневе".
Используйте System.Net.WebClient, чтобы делать HTTP-вызовы против ваших обработчиков и оценивать, что возвращается, что позволит вам протестировать открытый интерфейс обработчика.
В этом примере я жестко закодировал свою цель, и я использую метод в WebClient, который вернет строку.
WebClient также предоставляет вам доступ к ResponseHeaders, Encoding и другим полезным материалам "webby"; вы также можете загрузить информацию.
using System.Net;
namespace UnitTestHttpHandler
{
public class TestHarness
{
public static string GetString()
{
WebClient myWebClient = new WebClient();
return myWebClient.DownloadString("http://localhost/Morphfolia.Web/ContentList.ashx");
}
}
}
Затем вы можете использовать TestHarness для вызова целевого HttpHandler и проверки результатов в своих тестах (или использовать лучший подход к тестированию, если вы знаете один - я не являюсь аудитором модульного тестирования).
[TestMethod]
public void TestMethod1()
{
string x = UnitTestHttpHandler.TestHarness.GetString();
Assert.IsTrue(x.Length > 5);
}
Ответ 4
Вот статья, в которой четко объясняется модульное тестирование для обработчика http.
http://jgvimalan.wordpress.com/2011/08/30/unit-test-for-http-handler/
Ответ 5
Вы можете выполнить INTEGRATION-тестирование обработчика, используя методы, упомянутые в других ответах, чтобы выполнить тестирование UNIT, вам нужно будет создать некоторые интерфейсы и извлечь основную функциональность из обработчика, а также создать некоторые макетные объекты.
Вы не сможете unit test ВСЕ его части, потому что они полагаются на внешние ресурсы (те, которые вы будете издеваться), но это прекрасно, поэтому у нас есть интеграционное тестирование.
Ответ 6
Если вы хотите протестировать связь между вашими обработчиками и веб-интерфейсом, то да, интеграционное тестирование - это путь для этого. Для unit test вашей логики, не могли бы вы не разделить свою бизнес-логику на другие классы (я бы использовал отдельную сборку для бизнес-уровня) и mock/unit test эти классы вместо внешнего уровня представления?
Когда у вас есть структурированный (и проверенный модулем) бизнес-уровень, который был отделен от уровня представления, ваши обработчики могут просто создать экземпляр ваших бетонов и вызвать предоставленные методы. Как только это будет сделано, вы сможете перейти на интеграционное тестирование, так как ваша бизнес-логика будет проверена модулем.