Невозможно проверить заголовки ответа в модульном тесте - PullRequest
4 голосов
/ 22 декабря 2009

У меня есть модульный тест для обработчика Http. В нем я создаю HttpResponse объект и передаю его одному из методов моего обработчика Http.

Один из моих тестов пытается проверить, правильно ли установлены заголовки ответа:

Assert.AreEqual( "gzip", response.Headers["Content-Encoding"]);

Однако свойство Headers выдает PlatformNotSupportedException с сообщением «Для этой операции требуется интегрированный режим конвейера IIS» .

Странно то, что, насколько я понимаю, это исключение связано с установкой заголовков ответа, а не их чтением. Я использую TDD, поэтому я нигде (пока) не устанавливаю заголовки, но все же получаю исключение.

Почему я получаю это исключение и существует ли хороший или лучший способ для заголовков ответов модульного теста?

Ответы [ 2 ]

4 голосов
/ 22 декабря 2009

Из документации Response.Headers :

Примечания

Свойство Headers поддерживается только с интегрированным конвейером IIS 7.0 режим и как минимум .NET Framework 3.0. Когда вы пытаетесь получить доступ к свойству Headers и любой из этих два условия не соблюдены, а Исключение PlatformNotSupportedException выброшены.

По сути, вы даже не можете попытаться получить к нему доступ, если не выполняете эти условия.

На вашем месте я бы создал конструктор для вашего обработчика, который принимает объект HttpContextBase и использует макет для правильной проверки заголовков.

2 голосов
/ 22 декабря 2009

Я не уверен насчет получения, но моя догадка - тебе просто не повезло. На вопрос о том, как провести юнит-тест ответа на заголовки. хорошо ...

HttpContext и все его злые порождения - постоянная проблема с TDD. Они хотят, чтобы IIS был рядом, они запечатаны, чтобы вы могли расширить или издеваться над ними. Зло зло зло Что мы обычно делаем с этими маленькими придурками, так это пишем собственную оболочку с интерфейсом для них, например, IHttpContext. Тогда у вас есть собственный HttpContext и делегировать ему все вызовы. Тогда в вашем приложении каждый использует интерфейс. Это решает проблему взаимодействия с закрытыми классами Microsoft, потому что вы можете заменить макеты, заглушки или что-то еще.

Что касается того, как проверить фактический конкретный httpContext (или ответ, или запрос), я бы посоветовал вам этого не делать Microsoft должна нести ответственность за тестирование своих классов. Пока вы проверяете свое взаимодействие с ним, вы должны быть фанатичным

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...