你可以帮我写一下这个方法的UnitTest吗?我尝试了几种方法,但我无法解决它。
public ActionResult ChangePass()
{
if (Request.IsAuthenticated)
{
return View();
}
else
{
return RedirectToAction("Index", "Index", new { area = "" });
}
}
以下是我要做的事情。
[TestMethod]
public void ChangePass()
{
var identity = new GenericIdentity("admin@gmail.com");
var controller = new ProfilePageController();
var controllerContext = new Mock<ControllerContext>();
var principal = new Mock<IPrincipal>();
principal.Setup(p => p.IsInRole("user")).Returns(true);
principal.SetupGet(x => x.Identity.Name).Returns("admin@gmail.com");
controllerContext.SetupGet(x => x.HttpContext.User).Returns(principal.Object);
controller.ControllerContext = controllerContext.Object;
NUnit.Framework.Assert.AreEqual(controller.ChangePass(), identity.Name);
}
答案 0 :(得分:2)
首先,它是一个控制器动作方法,根本不应进行单元测试。而应仅测试业务逻辑。为什么呢?
原因,请看Request.IsAuthenticated
行。在您进行单元测试时,没有Request
个对象存在,因此该行必然会抛出NullRefException
。
此外,您发布的操作方法ChangePass()
没有涉及要在其中进行测试的业务逻辑