Модульное тестирование ASP.NET Приложение MVC — переменные сеанса

#asp.net #asp.net-mvc #asp.net-mvc-3 #unit-testing

#asp.net #asp.net-mvc #asp.net-mvc-3 #модульное тестирование

Вопрос:

Мне нужно создать стратегию модульного тестирования для моего приложения. В моем ASP.NET MVC applicationI будет использовать session, теперь мне нужно знать, как модульно протестировать мое действие, использующее Session.. Мне нужно знать, существуют ли рамки для метода модульного тестирования, включающего сеансы.

Ответ №1:

Если вам нужно имитировать сеанс, вы делаете это неправильно 🙂 Часть шаблонов MVC заключается в том, что методы действий не должны иметь никаких других зависимостей, кроме параметров. Итак, если вам нужен сеанс, попробуйте «обернуть» этот объект и использовать привязку модели (ваша пользовательская привязка модели, привязка не из данных POST, а из сеанса).

Что-то вроде этого :

 public class ProfileModelBinder : IModelBinder
{
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        if (bindingContext.Model != null)
            throw new InvalidOperationException("Cannot update instances");

        Profile p = (Profile)controllerContext.HttpContext.Session[BaseController.profileSessionKey];
        if (p == null)
        {
            p = new Profile();
            controllerContext.HttpContext.Session[BaseController.profileSessionKey] = p;
        }
        return p;
    }
}
  

не забудьте зарегистрировать его при запуске приложения, и тогда вы могли бы использовать его следующим образом :

 public ActionResult MyAction(Profile currentProfile)
{
    // do whatever..
}
  

хороший, полностью тестируемый, наслаждайтесь 🙂