如何在c# MVC 5.0中进行表单认证测试

本文关键字:表单 认证 测试 MVC | 更新日期: 2023-09-27 18:14:55

我已经尝试了很多,并搜索。我得到了很少的链接,但我没有成功地解决这个问题。

没有生成任何虚拟表单认证,在单元测试(c#-mvc)项目中,我想执行表单认证。

我使用了如下的接口方法

    private readonly IAuthenticationProvider _authenticationProvider
    public AccountController(IAuthenticationProvider authenticationProvider)
    {
        _authenticationProvider = authenticationProvider;
    }
    public interface IAuthenticationProvider
    {
        void SignOut();
        void SetAuthCookie(string username, bool remember);
        void RedirectFromLoginPage(string username, bool createPersistentCookie);
    }

    public class FormsAuthWrapper : IAuthenticationProvider
    {
        public void SignOut()
        {
            FormsAuthentication.SignOut();
        }
        public void SetAuthCookie(string username, bool remember)
        {
            FormsAuthentication.SetAuthCookie(username, remember);
        }
        public void RedirectFromLoginPage(string username, bool createPersistentCookie)
        {
            FormsAuthentication.RedirectFromLoginPage(username, createPersistentCookie);
        }
    }

用于登录

   public ActionResult Login(LoginViewModel model, string returnurl)
   {
      _authenticationProvider.SetAuthCookie(model.username, false)
   }

是初始化表单认证对象的任何其他方式。我仍然得到错误:对象引用未设置为对象的实例。

因为_authenticationProvider为空并且没有初始化form-authentication

它说使用new关键字创建一个对象实例

StackTrace是跟随…

   at System.Web.Security.CookielessHelperClass.UseCookieless(HttpContext context, Boolean doRedirect, HttpCookieMode cookieMode)
   at System.Web.Security.FormsAuthentication.SetAuthCookie(String userName, Boolean createPersistentCookie, String strCookiePath)
   at System.Web.Security.FormsAuthentication.SetAuthCookie(String userName, Boolean createPersistentCookie)
   at Test.Controllers.AccountController.Login(LoginViewModel model, String returnurl) in d:'projects'Test'Test'Controllers'AccountController.cs:line 81
   at Test.Tests.Controllers.CIControllerTest.TestSetup() in d:'projects'Test'Test.Tests'Controllers'CIControllerTest.       cs:line 47

如何在c# MVC 5.0中进行表单认证测试

对于IAuthenticationProvider的初始化,在AccountController中使用以下方法:

private readonly IAuthenticationProvider _authenticationProvider = new FormsAuthWrapper();

After That in TestController。如下所示创建新的Test Warrper类

public class FormsAuthWrapperTest : IAuthenticationProvider
{
    public void SignOut()
    {
       // MockFormsAuthentication.SignOut();
       // Mock your Authentication here
    }
    public void SetAuthCookie(string username, bool remember)
    {
       //MockFormsAuthentication.SetAuthCookie(username, remember);
       //Mock your Authentication here
    }
    public void RedirectFromLoginPage(string username, bool createPersistentCookie)
    {
        MockFormsAuthentication.RedirectFromLoginPage(username, createPersistentCookie);
       //Mock your Authentication here
    }
}
最后在TestController中进行测试。如下所示创建Account Controller对象
AccountController accountController = new AccountController(new FormsAuthWrapperTest());

现在,您可以使用您的测试包装器类进行测试,并使用实时包装器。