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
.
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.
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%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.
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.
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.
Tags und Links c# mstest microsoft-fakes