簡體   English   中英

對我的MVC4控制器操作方法進行單元測試,其中檢查Session是否為null

[英]Unit Testing my MVC4 Controller Action Method where Session is checked for null

我已經開始學習MVC4中的單元測試,並且有一個項目正在嘗試使用NUnit Framework for Test Cases進行測試。 我的控制器操作方法如下:

public ActionResult Edit(long id)
{
    if (Session["Admin"] != null)
    {
       tbl_Users objUser = new tbl_Users();
       objUser = objDBContext.tbl_Users.Find(id);
       if (objUser != null)
       {
            TempData["Edit"] = objUser;
            return PartialView("_Edit", objUser);
       }
    }
    return RedirectToAction("Logout", "Home");
}

這是我的Test類文件,我在其中編寫了TestMethod進行測試

[TestFixture]
public class AdminControllerTest
{
    [Test]
    public void Edit()
    {
        AdminController Admin = new AdminController();

        var id = Admin.Edit(3) as ViewResult;
        Assert.AreEqual("Edit", id.ViewName);
    }
}

問題是,當我在調試模式下運行時,它將調用操作方法,但是由於Session [“ Admin”]為null,它會引發NullReference異常。 誰能告訴我如何在“測試方法”之上運行。 謝謝

您可以像這樣模擬控制器的SessionState和HttpContext:
(此代碼使用Moq)

using System.Web;
using Moq;

[TestFixture]
public class AdminControllerTest
{
    [Test]
    public void Edit()
    {
        var mockSession = new Mock<HttpSessionStateBase>();
        mockSession.Setup(f => f["admin"]).Returns(()=> "yesToAdmin");
        var mockContext = new Mock<HttpContextBase>();
        mockContext.Setup(f => f.Session).Returns(mockSession.Object);

        AdminController admin = new AdminController();

        admin.ControllerContext = new ControllerContext()
        {
            Controller = admin,
            RequestContext = new RequestContext(mockContext.Object, new RouteData())
        };

        var id = admin.Edit(3) as ViewResult;
        Assert.AreEqual("Edit", id.ViewName);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM