【问题标题】:C sharp unit test [closed]CSharp单元测试[关闭]
【发布时间】:2017-12-16 22:13:57
【问题描述】:

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

【问题讨论】:

  • 请不要让我们为您编写解决方案。发布您的一些尝试和您遇到的具体问题。我们将帮助您将不可行的解决方案改造成可行的解决方案,而不是从头开始。
  • 我发布了我的尝试代码
  • 当您运行现有的单元测试时,它是否有效?
  • 不,它没有
  • 你能详细说明它在什么方面不起作用吗?它不编译吗?它在运行时是否给出异常?还有什么?

标签: c# unit-testing


【解决方案1】:

首先,它是一个控制器操作方法,根本不应该进行单元测试。相反,应该只测试业务逻辑。为什么?

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

此外,您发布的操作方法ChangePass() 根本不涉及要测试的业务逻辑

【讨论】:

  • 我知道,但我想编写通过它的测试
猜你喜欢
  • 1970-01-01
  • 2010-09-08
  • 2011-11-07
  • 2010-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-18
  • 1970-01-01
相关资源
最近更新 更多