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

发布于 2024-07-10 11:42:30 字数 291 浏览 10 评论 0原文

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

FormsAuthentication.SetAuthCookie(userName, false);

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

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

有什么方法可以注入假/模拟 FormsAuthentication 吗?

I'm working with a ASP.NET MVC solution in a test driven manner and I want to login a user to my application using forms authentication. The code I would like to end up with in the controller looks something like this:

FormsAuthentication.SetAuthCookie(userName, false);

My question is how do I write a test to justify this code?

Is there a way to check that the SetAuthCookie method was called with the correct parameters?

Is there any way of injecting a fake/mock FormsAuthentication?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

偏闹i 2024-07-17 11:42:30

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

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 ,它会执行它应该执行的操作(微软保证:-))。

I would start by writing an interface and a wrapper class that will encapsulate this logic and then use the interface in my controller:

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;
    }

}

Now IAuth could be easily mocked in a unit test and verify that the controller calls the expected methods on it. I would NOT unit test the FormsAuthWrapper class because it just delegates the call to the FormsAuthentication which does what it is supposed to do (Microsoft guarantee :-)).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文