Frage

Ich habe die MVCMockHelpers -Klasse verwendet, die gefunden wurde Hanselmans Blog für die Übergabe in einem verspotteten httpcontext. Wir haben es etwas erweitert, um einige Authentifizierungsdaten hinzuzufügen, die wir benötigten, und zum größten Teil war dies großartig.

Das Problem, das wir haben, ist, dass der Kontext, den wir dem Controller geben, einen Nullwert im httpcontext.response.output aufweist, was einige Ausnahmen verursacht. Ich bin mir nicht sicher, was ich hinzufügen soll, um dies zum Laufen zu bringen.

Hier ist die vorhandene FakeHttpConext () -Methode:

public static HttpContextBase FakeHttpContext()
{
    var context = new Mock<HttpContextBase>();
    var request = new Mock<HttpRequestBase>();
    var response = new Mock<HttpResponseBase>();
    var session = new Mock<HttpSessionStateBase>();
    var server = new Mock<HttpServerUtilityBase>();

    // Our identity additions ...
    var user = new Mock<IPrincipal>();
    OurIdentity identity = (OurIdentity)Thread.CurrentPrincipal.Identity;

    context.Expect(ctx => ctx.Request).Returns(request.Object);
    context.Expect(ctx => ctx.Response).Returns(response.Object);
    context.Expect(ctx => ctx.Session).Returns(session.Object);
    context.Expect(ctx => ctx.Server).Returns(server.Object);
    context.Expect(ctx => ctx.User).Returns(user.Object);
    context.Expect(ctx => ctx.User.Identity).Returns(identity);
    return context.Object;
}

Hier ist die explodierende Methode (die Teil des XMLResult -Projekts des MVC -Beitragsprojekts ist):

public override void ExecuteResult(ControllerContext context)
{
    if (_objectToSerialize != null)
    {
       var xs = new XmlSerializer(_objectToSerialize.GetType());
       context.HttpContext.Response.ContentType = "text/xml";
       xs.Serialize(context.HttpContext.Response.Output, _objectToSerialize);
    }
}

Was muss ich in der FakeHttpContext -Methode hinzufügen, um die NULL -Ausnahme zu verhindern, wenn auf den Kontext.httpcontext.Response.output verwiesen wird?

Klarstellung: Die Lösung, nach der ich suche, muss in MOQ und nicht in Rhino durchgeführt werden. Ich erwähnte MOQ im Frage -Titel, vernachlässigt aber den fraglichen Körper. Entschuldigung für Verwirrung.

AuflösungIch habe die folgenden zwei Codezeilen zur FakeHttpContext () -Methode hinzugefügt:

var writer = new StringWriter();
context.Expect(ctx => ctx.Response.Output).Returns(writer);

Dies verhindert die Nullausnahme. Ich bin mir nicht sicher, ob es eine gute Antwort langfristig ist, aber es funktioniert vorerst.

War es hilfreich?

Lösung

In den Tests für Mvccontrib Die Datei mvcmockHelps zeigt, wie es fertig ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top