Wie kann SmtpClient in einem UnitTest simuliert / simuliert werden?

8

Ich möchte es verwenden, um System.Net.Mail.SmtpClient in einem MS-Test UnitTest zu fälschen. Dazu habe ich eine Fakes Assemblym von System.dll hinzugefügt. Dann erstelle ich ein ShimsContext und ein StubSmtpClient .

%Vor%

Aber was mache ich damit? Das ultimative Ziel wäre, einen Test zu schreiben, der erwartet, dass die send-Methode mit einem Objekt von MailMessage aufgerufen wird.

    
user2900970 14.11.2013, 06:48
quelle

4 Antworten

17

Sie können eine Schnittstelle erstellen, die Funktionen zur Verfügung stellt, die von SmtpClient

verwendet werden %Vor%

Dann erstellen Sie Ihre Concrete-Klasse, die einen echten Job machen wird.

%Vor%

In Ihrer Testmethode können Sie jetzt nachspionieren und Ähnliches verwenden;

%Vor%     
Teoman shipahi 27.04.2015 21:10
quelle
6

Dies ist nicht wirklich eine Antwort auf Ihre Frage, sondern eine alternative Vorgehensweise:

Richten Sie in der app.config die SMTP-Einstellungen so ein, dass die E-Mails als gesendet werden Dateien in ein lokales Verzeichnis . Dann können Sie die Datei laden und den Inhalt in Ihrem Assert-Abschnitt überprüfen.

Sie müssen etwas mehr Code für die Assertion schreiben (oder vorzugsweise einige Hilfsfunktionen erstellen), aber Sie müssen nichts tun, was den Produktionscode beeinflusst.

    
Anders Abel 14.11.2013 06:52
quelle
2

Eine andere Alternative ist nDumbster :

Install-Package nDumbster

Es führt einen Smtp-Server im Speicher aus, gegen den Sie dann verifizieren können. Es macht es mehr zu einem Integrationstest, aber in der Regel sind diese höher als Unit-Tests, da Sie auch die SmtpClient -Verwendung testen möchten.

    
Chris S 06.08.2015 19:36
quelle
0

Ich musste SmtpClient für verschiedene Zwecke anpassen, aber die Schritte sind die gleichen: Ссылка

Es enthält die Schritte zum Erstellen eines Shims für SmtpClient und ein Beispiel dafür, dass alle Instanzen entsorgt werden.

    
user2000095-tim 05.03.2014 17:59
quelle

Tags und Links