0
我正在研究asp.net MVC 4應用程序並創建單元測試。我有一個帳戶控制器和寄存器,它有兩件事情的方法:FormsAuthentication.SetAuthCookie和Request.url單元測試失敗
if (this.Request.Url.ToString().Contains("127.0.0"))
{
user.AddPermission(UserEntity.PermissionType.BETA_ACCESS);
}
和
FormsAuthentication.SetAuthCookie(model.UserName, false);
在這兩行測試失敗。我瞪大眼睛,發現我們不能用FormsAuthentication.SetAuthCookie
爲FormsAuthentication是一個靜態類,所以我嘗試以下解決方法:
public interface IAuthenticationProvider
{
void SetAuthCookie(string username, bool remember);
}
public class FormsAuthWrapper : IAuthenticationProvider
{
public void SetAuthCookie(string userName, bool remember)
{
FormsAuthentication.SetAuthCookie(userName, remember);
}
}
,並在控制器動作我用:
_authenticationProvider.SetAuthCookie(model.UserName, false);
在我使用的測試方法:
var wrapper = new FormsAuthWrapper();
AccountController controller = new AccountController(s, config, wrapper);
但是當我調用控制器的操作方法,它仍然給上
對象引用空誤差_authenticationProvider.SetAuthCookie(model.UserName, false);
我的另一個問題是request.url有關,我想這在我的測試方法:
controller.ControllerContext = CreateStubControllerContext(controller);
var requestStub = Mock.Get(controller.Request);
requestStub.Setup(r => r.UrlReferrer).Returns(new Uri("http://127.0.0.1"));
var RegisterModel = new RegisterModel { UserName = "[email protected]", Password = "testpass", ConfirmPassword = "testpass" };
controller.Register(RegisterModel);
,但它在這條線的控制器動作拋出錯誤:
if (this.Request.Url.ToString().Contains("127.0.0"))
{
user.AddPermission(UserEntity.PermissionType.BETA_ACCESS);
}