ASP.NET MVC Unit Testing и HttpContext

ASP.NET MVC прошел долгий путь (по сравнению с веб-формами), став единым тестируемым фреймворком. Тем не менее, мы часто сталкиваемся с некоторыми оставшимися свиньями, такими как FormsAuthentication, которые я обычно оборачиваю в некоторый тип объекта UserSession, чтобы сохранить его чистым и тестируемым. На днях я понял, что использую Server.MapPath в своем действии контроллера, и в то время как такие вещи, как MvcContrib, позволяют легко (иш) имитировать текущий запрос, Я обнаружил, что иду по пути создания класса FileSystemService для переноса операций с файловой системой. Преимущества состоят в том, что вы получаете жесткий API-интерфейс, раскрывающий только те методы, которые вам нужны, и его легко заглушить в тестах. Недостатком является то, что это еще одна зависимость от конструктора.

Что такое сообщество Сообщества в этой ситуации? Где вы проводите линию, пытаясь сделать ваши контроллеры максимально легкими и гибкими?

1
задан razlebe 26 November 2011 в 10:39
поделиться

2 ответа

Имейте в виду, что ASP.NET MVC уже заменил запечатанный HttpContext более удобным для тестирования HttpContextBase, которую вы можете имитировать, чтобы предоставлять свои тесты с выбранными вами реализациями Server. *, Request. *, Response. * И т. Д.

Вам просто нужно установить ControllerContext контроллера для предоставления вашего тестового контекста:

controllerUnderTest.ControllerContext = new ControllerContext( testHttpContext, new RouteData(), controllerUnderTest );
1
ответ дан 2 September 2019 в 21:57
поделиться

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

1
ответ дан 2 September 2019 в 21:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: