I'm tyring to use Moq to determine if a user has a certain role. I tried the following example in the default MVC project (How to mock Controller.User using moq), however I'm getting the following error when running the test.
Expected invocation on the mock at least once, but was never performed: p => p.IsInRole("admin")
[TestMethod]
public void HomeControllerReturnsIndexViewWhenUserIsAdmin()
{
var homeController = new HomeController();
var userMock = new Mock<IPrincipal>();
userMock.Setup(p => p.IsInRole("admin")).Returns(true);
var contextMock = new Mock<HttpContextBase>();
contextMock.SetupGet(ctx => ctx.User)
.Returns(userMock.Object);
var controllerContextMock = new Mock<ControllerContext>();
controllerContextMock.SetupGet(con => con.HttpContext)
.Returns(contextMock.Object);
homeController.ControllerContext = controllerContextMock.Object;
var result = homeController.Index();
userMock.Verify(p => p.IsInRole("admin"));
Assert.AreEqual(((ViewResult)result).ViewName, "Index");
}
It sure looks like IsInRole("admin") is being called, so I'm not sure why I'm getting this error.