我正在尝试编写一个单元测试来验证我的一个控制器是否正确返回了视图,但是这个控制器有一个基础控制器访问了HttpContext.Current.Session。每次我创建一个新的控制器实例时,它都会调用基础控制器构造函数,导致测试失败并在HttpContext.Current.Session上引发空指针异常。以下是代码:
public class BaseController : Controller
{
protected BaseController()
{
ViewData["UserID"] = HttpContext.Current.Session["UserID"];
}
}
public class IndexController : BaseController
{
public ActionResult Index()
{
return View("Index.aspx");
}
}
[TestMethod]
public void Retrieve_IndexTest()
{
// Arrange
const string expectedViewName = "Index";
IndexController controller = new IndexController();
// Act
var result = controller.Index() as ViewResult;
// Assert
Assert.IsNotNull(result, "Should have returned a ViewResult");
Assert.AreEqual(expectedViewName, result.ViewName, "View name should have been {0}", expectedViewName);
}
有什么建议可以使用Moq来模拟访问基控制器中的Session,以便测试继承控制器时能够运行?