Как выполнить юнит-тест для отключения проверки запроса? - PullRequest
2 голосов
/ 20 декабря 2010

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

Я создал небольшой веб-сервис для минимизации JavaScript, и все было хорошо, свсе мои тесты пройдены.Затем я заметил ошибку: если бы я попытался минимизировать alert('<script>');, он выкинул бы HttpRequestValidationException.

Так что это достаточно легко исправить.Я просто добавлю [AllowHtml] к своему контроллеру.Но что может быть хорошим способом для модульного тестирования, чтобы этого не произошло в будущем?

Моей первой мыслью было следующее:

[TestMethod]
public void Minify_DoesntChokeOnHtml()
{
    try
    {
        using (var controller = ServiceLocator.Current.GetInstance<MinifyController>())
        {
            return controller.Minify("alert('<script></script>');");
        }
    }
    catch (HttpRequestValidationException)
    {
        Assert.Fail("Request validation prevented HTML from existing inside the JavaScript.");
    }
}

Однако это не работает, так какЯ просто получаю экземпляр контроллера и запускаю на нем методы, а не запускаю весь конвейер ASP.NET.

Что будет хорошим модульным тестом для этого?Может быть, отражатель на методе контроллера, чтобы увидеть, присутствует ли атрибут [AllowHtml]?Это кажется очень структурным и вряд ли переживет рефакторинг;что-то функциональное может иметь больше смысла.Есть идеи?

1 Ответ

1 голос
/ 02 февраля 2011

У вас есть только два варианта:

Первый

Напишите интеграционный тест , в котором размещается MVC in-proc или выполняется с помощью браузера (например, с помощью Watin), который будет охватывать ваш сценарий.

Второй

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

Я бы выбрал первый вариант.

...