Ich versuche, einen Unit-Test für meinen einen Controller zu schreiben, um zu überprüfen, ob eine Ansicht ordnungsgemäß zurückgegeben wurde, aber dieser Controller hat einen Basecontroller, der die HttpContext.Current.Session zugreift. Jedes Mal, wenn ich eine neue Instanz meines Controllers erstelle, wird der Basecontroller-Konstruktor aufgerufen und der Test schlägt mit einer Null-Pointer-Ausnahme für die HttpContext.Current.Session fehl. Hier ist der Code:
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);
}
Irgendwelche Ideen, wie zu spiegeln (mit Moq) die Sitzung, die in der Basis-Controller zugegriffen wird, so dass der Test in den abhängigen Controller ausgeführt wird?