繁体   English   中英

如何在ASP.NET MVC中模拟AuthorizeAttribute?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM