繁体   English   中英

如何使用创建会话的Moq对方法进行单元测试

[英]How to Unit test a method using Moqs which create session

如何测试在方法内部创建会话的方法。 我用来做单元测试。 当我使用测试用例调用方法时,无法在方法内部创建会话。 谁能帮我在下面为我的代码创建单元测试

public ActionResult InviteUser(string Id)
    {
      if (!string.IsNullOrEmpty(Id))
      {
        Session["verification_uid"] = Id; 
        return RedirectToAction("Login", "Account"); 
      }
      return View();
    }

我也尝试使用以下代码,但它不起作用

  [TestMethod]
        public void InviteUser_ExpectRedirectActionResultReturned()
        {
            //Arrange
            controller = new AccountController();

            var mockControllerContext = new Mock<ControllerContext>();
            var mockSession = new Mock<HttpSessionStateBase>();
            mockSession.SetupGet(s => s["verification_uid"]).Returns("123"); //somevalue
            mockControllerContext.Setup(p => p.HttpContext.Session).Returns(mockSession.Object);
            controller.ControllerContext = mockControllerContext.Object;

            var id = "1";
            System.Web.HttpContext.Current.Session["verification_uid‌​ID"] = "12";

            //Act
            var result = (RedirectToRouteResult)controller.InviteUser(id);

            //Assert
            result.RouteValues["action"].Equals("Index");
            result.RouteValues["controller"].Equals("Home");

            Assert.AreEqual("Index", result.RouteValues["action"]);
            Assert.AreEqual("Home", result.RouteValues["controller"]);
        }

您可以将会话变量的设置放入帮助器类中,实现一个接口,该接口将传递到您可以在单元测试中模拟的类中。

public MyClass 
{
    private readonly ISessionHelper _helper;

    public MyClass(ISessionHelper helper)
    {
        this._helper = helper;
    }

    public ActionResult InviteUser(string Id)
    {
      if (!string.IsNullOrEmpty(Id))
      {
        this._helper.SetSessionVariable("verification_uid", Id);
        return RedirectToAction("Login", "Account"); 
      }
      return View();
    }
}

您的助手将包含执行设置的SetSessionVariable。

然后,在单元测试中,您模拟了ISessionHelper

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM