Question

Je me sers de la classe MvcMockHelpers trouvé blog de Hanselman pour passer en un moquaient HttpContext. Nous avons prolongé un peu pour ajouter certaines données d'authentification dont nous avions besoin et pour la plupart cela a été formidable.

La question que nous avons est que le contexte que nous donnons au contrôleur a une valeur nulle dans le HttpContext.Response.Output, ce qui est à l'origine des exceptions à jeter. Je ne sais pas quoi ajouter pour obtenir ce travail.

Voici la méthode FakeHttpConext existante ():

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;
}

Voici la méthode explosion (qui fait partie du XMLRésultat du projet MVC Contrib):

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);
    }
}

Que dois-je ajouter dans la méthode FakeHttpContext pour empêcher l'exception nulle lorsque le context.HttpContext.Response.Output est référencé?

Précision:. La solution que je suis à la recherche pour les besoins à faire dans Moq, pas Rhino je l'ai mentionné Moq dans le titre de la question, mais négligeais ce corps en question. Désolé pour la confusion.

Résolution J'ajouté les deux lignes suivantes de code à la méthode FakeHttpContext ():

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

Cela empêche l'exception nulle. Je ne sais pas si c'est une bonne réponse à long terme, mais cela fonctionne pour l'instant.

Était-ce utile?

La solution

Dans les tests pour MvcContrib le fichier MvcMockHelps montre comment il est fait.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top