我想创建模拟用户并测试是否有人没有“经理”声明可以访问操作。
不,你不知道。您只想将用户传递给您编写的属性并进行测试,即可正确设置filterContext.Result
。而已。您不需要测试System.Web.Mvc的工作方式。正在测试的单个单元!
推测你的属性是AuthorizeAttribute
,对吗?所以你需要测试OnAuthorization(AuthorizationContext)
。
免责声明:我没有用过起订量在一段时间,但你的代码大概看起来一般是这样的:
var user = new Mock<IPrincipal>();
user.Setup(/* whatever you need to look at */);
var authContext = new Mock<AuthorizationContext>();
authContext.Setup(ac => ac.HttpContext.User).Returns(user);
var myAttribute = new RequireManagerAttribute();
myAttribute.OnAuthorization(authContext);
authContext.VerifySet(ac => ac.Result = /* whatever you expect */);
为什么你会测试这个?您将要验证的是MVC自己的基础架构。为什么这对你的应用有价值?如果您的逻辑(而不是MVC)受到Manager声明的影响,情况会有所不同。然后,一个单元测试将是有意义的,并嘲笑校长等将是必要的(如果你打电话给IPrincipal.IsInRole()例如)。 – 2012-04-30 20:26:32