, WebAPI, , Unit Test ApiController User.
, ASP.NET MVC, , . , / , , , , , .
, . , .
public class SutController : Controller
{
public string Get() {
return User.Identity.Name;
}
}
public class TestableControllerContext : ControllerContext {
public TestableHttpContext TestableHttpContext { get; set; }
}
public class TestableHttpContext : HttpContextBase {
public override IPrincipal User { get; set; }
}
[TestMethod]
public void IndexNoneMoq()
{
var identity = new GenericIdentity("tugberk");
var controller = new SutController();
var controllerContext = new TestableControllerContext();
var principal = new GenericPrincipal(identity, null);
var testableHttpContext = new TestableHttpContext
{
User = principal
};
controllerContext.HttpContext = testableHttpContext;
controller.ControllerContext = controllerContext;
Assert.AreEqual(controller.Get(), identity.Name);
}
Mocking/Isolation i.e Moq
[TestMethod]
public void IndexMoq()
{
var identity = new GenericIdentity("tugberk");
var controller = new SutController();
var controllerContext = new Mock<ControllerContext>();
var principal = new Mock<IPrincipal>();
principal.Setup(p => p.IsInRole("Administrator")).Returns(true);
principal.SetupGet(x => x.Identity.Name).Returns("tugberk");
controllerContext.SetupGet(x => x.HttpContext.User).Returns(principal.Object);
controller.ControllerContext = controllerContext.Object;
Assert.AreEqual(controller.Get(), identity.Name);
}
: , ASP.NET WebAPI MVC (AFAIK), , .