2 Stimmen

Mocking MailController mit ActionMailer.net unter Verwendung von Moq

Ich versuche, meinen MailController zu verspotten

_mockMailController = new Mock();
_mockMailController.Setup(x => x.ForgotPassword("test@email.com"));

Mein Controller benötigt ein IMailController als Abhängigkeit, jedoch wenn ich aufrufe

mailController.ForgotPassword("test@email.com").Deliver();

Bekomme ich eine NullReferenceException (weil ForgotPassword nichts zurückgibt, nehme ich an)

Am besten würden wir EmailResult einfügen?

1voto

Ufuk Hacıoğulları Punkte 36960

Sie haben kein Setup für die Rückgabe eines Werts aus der ForgotPassword-Methode erstellt. Mit dem Standardverhalten wird in diesem Fall der Standardwert für den Typ zurückgegeben, der in diesem Fall null ist.

Sie können den Rückgabewert wie folgt mocken:

_mockMailController.Setup(x => x.ForgotPassword("test@email.com"))
                   .Returns(new SomeType());

1voto

hydr Punkte 408

Ich habe einen Pull-Request für ActionMailer.Net erstellt, der eine IEmailResult-Schnittstelle einführt, die das Mocking sehr einfach macht. Schau es dir hier an:

https://bitbucket.org/swaj/actionmailer.net/pull-request/4/iemailresult-interface-for-better/

Bis der Pull-Request zusammengeführt wird, kannst du einen benutzerdefinierten Build aus meinem Fork des Projekts verwenden.

https://bitbucket.org/hydr/xv-actionmailer.net

Das Mocking wird so einfach wie das Schreiben von (mit FakeItEasy, Moq könnte ähnlich sein):

//SetUp
_myMailer = A.Fake();

//Später im Assert
A.CallTo(() => _myMailer.MyTestEmail()).MustHaveHappened(Repeated.Exactly.Once);

wenn der Mailer wie folgt definiert ist:

public class MailController : MailerBase, IMyMailer
{
    public IEmailResult MyTestEmail()
    {
        To.Add("empfänger@sdf.com");
        From = "absender@sdf.com";
        Subject = "Betreff";
        return Email();
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X