当前位置:  开发笔记 > 编程语言 > 正文

如何对使用FormsAuthentication的ASP.NET MVC控制器进行单元测试?

如何解决《如何对使用FormsAuthentication的ASP.NETMVC控制器进行单元测试?》经验,为你挑选了1个好方法。

我正在以测试驱动的方式使用ASP.NET MVC解决方案,我想使用表单身份验证将用户登录到我的应用程序.我想在控制器中得到的代码看起来像这样:

FormsAuthentication.SetAuthCookie(userName, false);

我的问题是如何编写测试来证明这段代码的合理性?

有没有办法检查使用正确的参数调用SetAuthCookie方法?

有没有办法注入假/模拟FormsAuthentication?



1> Darin Dimitr..:

我将首先编写一个接口和一个封装类,它将封装此逻辑,然后在我的控制器中使用该接口:

public interface IAuth 
{
    void DoAuth(string userName, bool remember);
}

public class FormsAuthWrapper : IAuth 
{
    public void DoAuth(string userName, bool remember) 
    {
        FormsAuthentication.SetAuthCookie(userName, remember);
    }
}

public class MyController : Controller 
{
    private readonly IAuth _auth;

    public MyController(IAuth auth) 
    {
        _auth = auth;
    }

}

现在IAuth可以在单元测试中轻松模拟并验证控制器是否在其上调用预期的方法.我不会对该FormsAuthWrapper类进行单元测试,因为它只是将调用委托给FormsAuthentication它应该做的事情(Microsoft保证:-)).


*叹息*微软为这个框架的可测试性感到自豪!我希望有一些内置的方法来模拟这个没有包装.可能不会 :(
问题不在于框架不可测试......问题在于FormsAuthentication类早于MVC的单元测试设计.正如Darin所提到的,解决这个问题的最佳方法是使用接口将静态方法与类控制器分离.
对此+1,不要测试其他人的框架,只是你对THEM的使用.我们在应用程序中执行相同(类似)的操作(包装FormsAuth的东西等)
推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有