36 Stimmen

ASP.NET MVC-Einheitstest-Controller mit HttpContext

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?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X