Устройства тестирования HTTP-обработчиков?

Мой текущий проект, основанный на Asp.net, широко использует обработчики Http для обработки различных запросов? Итак, есть ли способ, с помощью которого я могу проверить функциональность каждого из обработчиков, используя случаи unit test? Мы используем инфраструктуру Nunit и Moq для облегчения тестирования модулей.

Ответы

Ответ 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);
    }

Ответ 5

Вы можете выполнить INTEGRATION-тестирование обработчика, используя методы, упомянутые в других ответах, чтобы выполнить тестирование UNIT, вам нужно будет создать некоторые интерфейсы и извлечь основную функциональность из обработчика, а также создать некоторые макетные объекты.

Вы не сможете unit test ВСЕ его части, потому что они полагаются на внешние ресурсы (те, которые вы будете издеваться), но это прекрасно, поэтому у нас есть интеграционное тестирование.

Ответ 6

Если вы хотите протестировать связь между вашими обработчиками и веб-интерфейсом, то да, интеграционное тестирование - это путь для этого. Для unit test вашей логики, не могли бы вы не разделить свою бизнес-логику на другие классы (я бы использовал отдельную сборку для бизнес-уровня) и mock/unit test эти классы вместо внешнего уровня представления?

Когда у вас есть структурированный (и проверенный модулем) бизнес-уровень, который был отделен от уровня представления, ваши обработчики могут просто создать экземпляр ваших бетонов и вызвать предоставленные методы. Как только это будет сделано, вы сможете перейти на интеграционное тестирование, так как ваша бизнес-логика будет проверена модулем.