Mocking d’un HttpContext Response.Output avec Moq

J’utilise la classe MvcMockHelpers trouvée sur le blog de Hanselman pour transmettre un object HontpContext simulé. Nous l’avons un peu étendu pour append quelques données d’authentification dont nous avions besoin et, dans l’ensemble, ce fut formidable.

Le problème que nous rencontrons est que le contexte que nous donnons au contrôleur a une valeur nulle dans HttpContext.Response.Output, ce qui provoque la génération d’exceptions. Je ne sais pas quoi append pour que cela fonctionne.

Voici la méthode FakeHttpConext () existante:

public static HttpContextBase FakeHttpContext() { var context = new Mock(); var request = new Mock(); var response = new Mock(); var session = new Mock(); var server = new Mock(); // Our identity additions ... var user = new Mock(); 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 qui explose (qui fait partie du XmlResult du projet MVC Consortingb):

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

Qu’est-ce qu’il me faut append à la méthode FakeHttpContext pour empêcher l’exception null lorsque le contexte.HttpContext.Response.Output est référencé?

Précision: la solution que je recherche doit être mise au point à Moq et non à Rhino. J’ai mentionné Moq dans le titre de la question, mais je l’ai négligé dans le corps de la question. Désolé pour toute confusion.

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

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

Cela empêche l’exception nulle. Pas sûr que ce soit une bonne réponse à long terme, mais ça marche pour le moment.

    Dans les tests pour MvcConsortingb, le fichier MvcMockHelps montre comment procéder.