Что первое, что приходит вам в голову, когда вы понимаете, что ваш модульный тест должен имитировать HttpContext? 😭 Это не сложная задача, но, согласитесь, скучная.
Я часто задавался вопросом, могу ли я найти лучший способ быстрее писать модульные тесты, чтобы уменьшить сопротивление написанию и даже улучшить их качество. Итак, я приступил к делу и написал реализацию HttContext Mock, которая инициализирует из коробки все свойства и методы без какой-либо настройки.
HttpContextMoq
Мое предложение - это пакет HttpContextMoq, доступный на nuget.org, и исходный код на GitHub.
Например, если вам нужно имитировать заголовок Referer в вашем запросе, вам нужно написать 5 строк кода, 6, если вы рассматриваете создание Mock<HttpContext>
.
С HttpContextMock вам нужна только одна строка для настройки заголовка referer.
Что такое класс HttpContextMock?
HttpContextMock - это реализация AspNetCore.Http.HttpContext
, которая хранит Mock<HttpContext>
экземпляр и работает как прокси для настоящего Mock.
Конструктор HttpContextMock
инициализирует макет для запроса, ответа, заголовка и т. Д., Чтобы он также работал в качестве прокси.
Например, HttpRequest
следует тому же шаблону и так один, и так один, до последнего чистого метода и свойств вашего контекста запроса.
Итак, когда вы создаете экземпляр HttpContextMock
, все настройки доступны и инициализированы.
Как использовать HttpContextMoq?
Импортируйте пакет Nuget HttpContextMoq:
Или, если вы хотите настроить реализацию, вы можете клонировать или / и скопировать код в свой проект. Смотрите исходный код здесь:
Расширения HttpContextMock
HttpContextMock имеет 5 расширений для большинства случаев использования модульного тестирования ASP.NET Core:
- Запросить URL
HttpContextMock.SetupUrl()
- Заголовки запросов
HttpContextMock.SetupRequestHeaders()
- Запросить файлы cookie
HttpContextMock.SetupRequestCookies()
- Сессия
HttpContextMock.SetupSession()
- Запросить услуги
HttpContextMock.SetupRequestService()
На изображении ниже мы видим очень полезный макет URL https://localhost/mocks?assert=true
, который будет настраивать все запросы и свойства и методы запросов.
Смотрите SetupUrl
исходный код здесь.
Session
, как и URL, задает свойства Session
и Features
для HttpContext
. См. Пример модульного теста ниже.
Расширения Request.Headers
, Request.Cookies
и RequestServices
также пытаются изменить эти свойства с минимальными усилиями.
Случаи применения
Я рекомендую просмотреть образцы кода и некоторые модульные тесты, чтобы проверить, как вы можете настроить свой HttpContext
по URL-адресу, сеансу, заголовкам, файлам cookie, запросам и т. Д.
- Https://github.com/tiagodaraujo/httpcontextmoq/tree/master/tests/HttpContextMoq.Samples
- Https://github.com/tiagodaraujo/httpcontextmoq/tree/master/tests/HttpContextMoq.Tests
Заключение
Возможно, это не лучшее решение для вас, а может, и не для всех, но в моем случае это сэкономило мне много времени на тысячи модульных тестов, которые я написал с помощью HttpContext.
Если у вас есть предложения, улучшения или что-то еще, откройте вопрос на Github или оставьте комментарий. Я буду счастлив узнать, что это может помочь большему количеству людей.
Тесты безопасны.