如何在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
对于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());
现在,您可以使用您的测试包装器类进行测试,并使用实时包装器。