У меня есть код в контроллере, который потребляет HttpContext
public ActionResult Index()
{
var currentUser=HttpContext.User.Identity.Name;
......
}
При попытке написать тест с помощью NUnit, как этот
[Test]
public void CanDisplayRequest()
{
//Act
var result= (ViewResult)_requestController.Index();
//Assert
Assert.IsInstanceOf<OrderRequest>(resut.Model);
}
Тест завершится неудачно, потому что он не смог найти HttpContext
Итак, как я могу высмеять HttpContext.Current.User.Identity.Name
Я использую Moq для Mocking
Ответ 1
вы можете инициализировать свой контроллер фальшивым контекстом с помощью поддельного принципала, как показано ниже.
var fakeHttpContext = new Mock<HttpContextBase>();
var fakeIdentity = new GenericIdentity("User");
var principal = new GenericPrincipal(fakeIdentity, null);
fakeHttpContext.Setup(t => t.User).Returns(principal);
var controllerContext = new Mock<ControllerContext>();
controllerContext.Setup(t => t.HttpContext).Returns(fakeHttpContext.Object);
_requestController = new RequestController();
//Set your controller ControllerContext with fake context
_requestController.ControllerContext = controllerContext.Object;