首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Moq通过ActionMailer.net模拟MailController

使用Moq通过ActionMailer.net模拟MailController
EN

Stack Overflow用户
提问于 2013-05-03 06:38:02
回答 2查看 109关注 0票数 2

我在试着模仿我的MailController

代码语言:javascript
复制
_mockMailController = new Mock<IMailController>();
_mockMailController.Setup(x => x.ForgotPassword("test@email.com"));

我的控制器接受IMailController作为依赖项,但是当我调用

代码语言:javascript
复制
mailController.ForgotPassword("test@email.com").Deliver();

我得到一个NullReferenceException (我猜是因为ForgotPassword不返回任何内容)

理想情况下,我们应该存根EmailResult

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-03 21:31:46

我为ActionMailer.Net创建了一个pull请求,它引入了一个IEmailResult接口,使得模拟非常容易。看看这个:

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

在拉入请求被合并之前,您可以使用来自我的项目frok的自定义构建。

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

模仿get和编写get一样简单(使用FakeItEasy,Moq可能类似):

代码语言:javascript
复制
//SetUp
_myMailer = A.Fake<IMyMailer>();

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

当Mailer定义如下时:

代码语言:javascript
复制
public class MailController : MailerBase, IMyMailer
{
    public IEmailResult MyTestEmail()
    {
        To.Add("recipient@sdf.com");
        From = "sender@sdf.com";
        Subject = "Subject";
        return Email();
    }
}
票数 1
EN

Stack Overflow用户

发布于 2013-05-03 16:01:49

您尚未为模拟从ForgotPassword返回值方法创建设置。对于默认行为,这将返回该类型的默认值,在本例中为null。

您可以像这样模拟返回值:

代码语言:javascript
复制
_mockMailController.Setup(x => x.ForgotPassword("test@email.com"))
                   .Returns(new SomeType());
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16348886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档