C sharp单元测试

时间:2017-07-12 13:02:21

标签: c# unit-testing

你可以帮我写一下这个方法的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);
        }

1 个答案:

答案 0 :(得分:2)

首先,它是一个控制器动作方法,根本不应进行单元测试。而应仅测试业务逻辑。为什么呢?

原因,请看Request.IsAuthenticated行。在您进行单元测试时,没有Request个对象存在,因此该行必然会抛出NullRefException

此外,您发布的操作方法ChangePass()没有涉及要在其中进行测试的业务逻辑