我想测试一个使用 grails Email 插件发送电子邮件的圣杯控制器。 我损失了多少时间, 要模拟 < code> sendMail code > 关闭, 才能让互动起作用。 下面是我最新的测试代码版本 :
def controller should send a multipart email () {
given: a mocked mailService
controller.mailService = Mock(grails.plugin.mail.MailService)
controller.mailService.sendMail(*_) >> Mock(org.springframework.mail.MailMessage)
when:
controller.sendNow()
then:
1* _.multipart(true)
}
控制器代码看起来和你预期的相似,例如:
def mailService
def sendNow() {
mailService.sendMail {
multipart true
to [email protected]
from [email protected]
subject a subject
body a body
}
}
如果我运行此测试, 我就会得到我 < code> multipulpart 互动的0个引用, 而不是1。 < code> give: 区块的第二行: 区块对我来说似乎可疑, 但如果我试着模拟一个 关闭
, 而不是 org.springframework.mail.MailMessage
my test access. mail.MailMessage my access.
Edited
Aha, 几小时后再用新思维看代码, 我可以看到为什么上述代码不起作用; 为了让我抓住 < code> multipart 和其他 DSL 调用, 我将不得不嘲笑关闭本身, 而不是发送邮件方法( 由于关闭是在控制器内部定义的, 我无法做到这一点 ) 。 我也许可以做的是检查 < em> arguments em > 至 < code> sendMail 的方法, 以查看所有必要的信息。