MvcMailer-Komponententests: System.ArgumentNullException httpContext darf nicht null sein

8

Ich kann Komponententests für MvcMailer mit der Visual Studio-Testsuite und Moq nicht erfolgreich ausführen. Ich habe das Beispiel aus dem Wiki Wort für Wort kopiert, aber jedes Mal die folgende Ausnahme:

%Vor%

Der Code ist wie folgt: (Mit dem VS-Unit-Testframework - genau der gleiche Fehler bei der Verwendung von nUnit wie im Beispiel)

%Vor%

Fehler in der folgenden Zeile in der Welcome () -Methode (direkt aus dem Wiki kopiert):

%Vor%

Das Wiki ist hier: Ссылка

Ähnlich (fast genau dasselbe) Frage: MvcMailer: NUnit-Tests auf Razor-Ansichten, die Url.Action verwenden, können nicht abgeschlossen werden

Wer weiß, wie man das beheben kann? Die verknüpfte Frage besagt, dass ich die PopulateBody-Methode, die ich gemacht habe, nachahmen muss (gemäß Wiki).

    
woggles 21.05.2011, 08:48
quelle

4 Antworten

2

Eine Problemumgehung besteht darin, den Code folgendermaßen zu ändern:

PopulateBody(mailMessage, "Welcome", null);

Dies wird funktionieren, weil Sie eine Schein-Installation für diese Überladung von PopulateBody haben und nicht für die 2-Parameter-Version davon.

    
Filip Cornelissen 22.04.2012, 21:47
quelle
3

Eine schnelle Ergänzung zu Filips Antwort, die jemand hilfreich finden könnte: Ich verwende die Version 4.0 des MvcMailer-Pakets. Ich habe die Populate(Action<MvcMailMessage> action) -Methode in meinen Mailer-Aktionen verwendet und festgestellt, dass sie eine vier -Parameterversion von PopulateBody :

verwendet %Vor%

Als solche habe ich festgestellt, dass der Mock mit vier Parametern eingerichtet wurde ...

%Vor%

... hat es geschafft.

    
sammy34 08.03.2013 09:04
quelle
0

Sie müssen wahrscheinlich auch HttpContext vortäuschen. Sie können dies tun, indem Sie ein HttpContextBase-Mock-Objekt erstellen und es Ihrem Controller-Objekt zuweisen.

    
Hadi Eskandari 21.05.2011 10:25
quelle
0

Ich vermute, dass Sie der neuen _userMailerMock -Variable einen neuen Mock zuweisen und die PopulateBody -Methode daher nicht verspotten.

%Vor%

Entnehmen Sie die zweite Zuweisung _userMailerMock = new Mock<UserMailer>(); die Zeile vor Callbase = true;

    
aqwert 22.05.2011 09:42
quelle