8
votes

MVCMailer Unit Tests: System.Argumentnulxception httpContext ne peut pas être null

Je ne peux pas exécuter avec succès des tests d'unité pour MVCMailer à l'aide de la suite Visual Studio Test et MOQ. J'ai copié l'exemple du mot wiki pour mot, mais obtenez l'exception suivante à chaque fois:

 PopulateBody(mailMessage, viewName: "Welcome");


6 commentaires

Ce Le problème a été signalé à l'équipe de courrier MVC mais a été fermé sans résolution. Est-ce que quelqu'un a une solution de contournement / solution?


@Josh, malheureusement, je n'ai toujours pas trouvé de solution ou de contournement. Devinez ce bug est entre les mains du courrier MVC Devs ...


une solution de contournement consiste à changer votre code à ceci: populatebodody (Mailmessage, "Bienvenue", NULL); Cela fonctionnera car vous avez une configuration moqueuse pour cette surcharge de population et non pour la version 2 paramètres de ce..


@FILIPCORNISISEN: Enfin une solution qui a fonctionné! Merci mon pote... :)


@Filipcornissen ne voulez-vous pas poster votre commentaire comme une réponse afin que je puisse l'accepter?


fait, maintenant, cela peut aider le reste du monde ;-)


4 Réponses :


0
votes

Vous devez probablement vous moquer de httpcontext aussi. Vous pouvez le faire en créant un objet de httpcontextbasebasebasebasebasebasebasebasebasebasebasebasebase et l'attribuez à votre objet de contrôleur.


1 commentaires

J'essaie simplement de tester le mailer pour l'instant, pas le contrôleur qui utilise le mailer (si cela fait toute différence!).



0
votes

Je suppose que cela est dû à que vous réaffectant un nouveau simulateur dans la variable _usermailermock de code> et ne moquez donc pas la méthode code> populate code>.

var _userMailerMock = new Mock<UserMailer>();
_userMailerMock.Setup(mailer => mailer.PopulateBody(It.IsAny<MailMessage>(), "Welcome", null));
_userMailerMock.CallBase = true;


1 commentaires

Oups j'ai collé le code dans Stackoverflow incorrectement. Il n'y a qu'une seule affectation à l'utilisateur Mailermock dans le code. Toujours la même erreur.



2
votes

Une solution de contournement consiste à modifier votre code à ceci:

populatebody (Mailmessage, "Bienvenue", NULL);

Cela fonctionnera car vous avez une configuration moqueuse pour cette surcharge de population et non pour la version 2 paramètres ..


0 commentaires

3
votes

Un ajout rapide à la réponse de Filip que quelqu'un pourrait trouver utile: j'utilise la version 4.0 du package MVCMailer. J'utilisais l'action peupluler (action action) code> à l'intérieur de mes actions de ma charieur et remarqua qu'il utilise une quatre em> forte> -parameter version de populatebody code>: xxx pré>

En tant que tel, j'ai trouvé que la configuration de la simule avec quatre paramètres ... P>

PopulateBody(mailMessage, "Welcome", "SomeMasterName", null);


1 commentaires

Merci! Le wiki doit être mis à jour à la nouvelle version. Bon travail