[英]How to Mock up AuthorizeAttribute in asp.net mvc?
我有自己的自定义Authorize Attribute,我正在尝试检查控制器方法以查看它们是否具有正确的角色。 现在,我的自定义授权标签中包含数据库代码。
我模拟的方法似乎不起作用,因为我发现的反射内容似乎没有传递任何参数,因此我在Authorize Attribute中的默认构造函数受到了打击,创建了一个新的服务层对象,该对象创建了存储库对象(单元测试)。
var indexAction = typeof(Controller).GetMethod(method);
var authorizeAttributes = indexAction.GetCustomAttributes(typeof(AuthorizeAttribute), true);
//Assert
Assert.That(authorizeAttributes.Length > 0, Is.True);
foreach (AuthorizeAttribute att in authorizeAttributes)
{
Assert.That(att.Roles, Is.EqualTo(roles));
}
我的AutorizeAttribute的构造方法
public MyAuthorize()
{
authorize = new ServiceLayer();
}
public MyAuthorize(IServicelayer layer)
{
authorize = layer;
}
反射的东西不断调用我的默认构造函数。 如何传递模拟服务层或其他内容?
谢谢
您是否看过一些模拟框架? 我过去曾用这些来伪造http上下文等。
这是另一个Stack Overflow帖子,可能会为您提供帮助...
https://stackoverflow.com/questions/37359/what-c-mocking-framework-to-use
我不认为问题出在您的代码上,而是您要测试的内容。 是什么决定该属性具有的角色?
如果您基于传递给属性的内容从服务层检索角色,则您的测试应确认该属性存在于其所保护的操作(控制器测试的一部分)中,将对服务层进行适当的调用以从属性(属性测试的一部分),并且服务层为特定请求返回适当的值(控制器测试的一部分)。
为确保所有部分协同工作,您将需要使用本质上模仿整个请求管道的集成测试-像史蒂夫·桑德森(Steve Sanderson)的MvcIntegrationTest这样的东西可以简化此http://blog.codeville.net/2009/06/11/integration-测试您的ASPNET MVC应用程序/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.