我正在使用Moq来确定用户是否具有某个角色。我在默认的MVC项目(How to mock Controller.User using moq)中尝试了以下示例,但是在运行测试时出现以下错误。
模拟上的预期调用至少一次,但从来没有 执行:p => p.IsInRole( “管理员”)
[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");
}
看起来肯定会调用IsInRole(“admin”),所以我不确定为什么我会收到此错误。
答案 0 :(得分:1)
你永远不会打电话
userMock.Object.IsInRole("admin")
您正在设置
userMock.Object.IsInRole("admin") == true
并且您正在尝试验证是否以这种方式调用它,但是对Verify
的调用失败,因为您从未手动调用IsInRole("admin")
,而Index
方法也没有HomeController
。