1
我有一个Azure MVC4项目。我想编写简单的测试来检查用户登录。我的登录行为被定义为使用控制器参数进行单元测试
[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
if (ModelState.IsValid)
{
if (Membership.ValidateUser(model.UserName, model.Password))
{
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
&& !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction("Index", "Home");
}
}
else
{
ModelState.AddModelError("", "The user name or password provided is incorrect.");
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
和我的测试方法
[TestMethod]
public void UserValidLoginTest()
{
// Arrange
AccountController controller = new AccountController();
// Act
LogOnModel model = new LogOnModel()
{
UserName = "[email protected]",
Password = "pass1234"
};
var result = controller.LogOn(model, null) as RedirectToRouteResult;
// Assert
Assert.IsNotNull(result);
Assert.AreEqual(result.RouteValues["action"], "Index");
}
我有两个问题,第一个是
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
回报的NullReferenceException也
Url.IsLocalUrl(returnUrl)
也一样。我怎么能解决这个问题?我怎么测试它?我也可以用Selenium或Moq编写集成测试,但我不确定如何使用Azure进行测试。任何想法如何解决这个问题?
测试静态类很困难。你可以使用这些对象的接口吗?然后模拟接口。 – Joe
我们可以做一个例子吗?我没有找到任何有用的例子如何做到这一点。 – FrEaKmAn