Контроллер тока тесно связан с проблемами реализации (HttpContext
), которые затрудняют его модульное тестирование в изоляции.
Просмотр текущего дизайна и развязки от HttpContext.Current
, который равен null
, поскольку IIS недоступен при модульном тестировании.
Также Controller
уже имеет свойство HttpContext
public HttpContextBase HttpContext { get; }
, который пытается отделить с помощью HttpContextBase
, который может быть издеваться.
К этому свойству можно получить доступ и установить его через ControllerContext
.
Поэтому сначала обновите контроллер, чтобы использовать локальное HttpContext
свойство
public class BaseController : Controller {
public virtual Tenant Tenant {
get { return HttpContext.Items["Tenant"] as Tenant; }
}
}
Теперь, когда контроллериспользует контекст, который можно смоделировать, при необходимости он может быть проверен модулем.
//Arrange
var tenant = new Tenant() {
//...
};
var mockHttpContext = new Mock<HttpContextBase>(); //USING MOQ
mockHttpContext.Setup(_ => _.Items["Tenant"]).Returns(tenant);
var controller = new DefaultController();
controller.ControllerContext =
new ControllerContext(mockHttpContext.Object, new System.Web.Routing.RouteData(), controller);
//Act
var result = controller.Index();
//Assert
//...