2

私は自分を嘲笑しようとしているMailController

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

私のコントローラーは依存関係を持っていますが、IMailController呼び出すと

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

NullReferenceException が発生します (ForgotPassword何も返さないためだと思います)

理想的には、スタブEmailResult?

4

2 に答える 2

1

モックを非常に簡単にする IEmailResult インターフェイスを導入する ActionMailer.Net のプル リクエストを作成しました。これを見てください:

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

プル リクエストがマージされるまで、プロジェクトの私の frok からカスタム ビルドを使用できます。

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

get のモッキングは書くのと同じくらい簡単です (FakeItEasy の場合、Moq は似ているかもしれません):

//SetUp
_myMailer = A.Fake<IMyMailer>();

//Later on in Assert
A.CallTo(() => _myMailer.MyTestEmail()).MustHaveHappened(Repeated.Exactly.Once);

メーラーが次のように定義されている場合:

public class MailController : MailerBase, IMyMailer
{
    public IEmailResult MyTestEmail()
    {
        To.Add("recipient@sdf.com");
        From = "sender@sdf.com";
        Subject = "Subject";
        return Email();
    }
}
于 2013-05-03T13:31:46.360 に答える
1

ForgotPassword メソッドから値を返すモックの設定が作成されていません。デフォルトの動作では、これは型のデフォルト値を返します。この場合は null です。

次のように戻り値をモックできます。

_mockMailController.Setup(x => x.ForgotPassword("test@email.com"))
                   .Returns(new SomeType());
于 2013-05-03T08:01:49.233 に答える