[英]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.