我在下面有以下代码,需要测试用户暂停时发送电子邮件。
def suspendClient(client: Client, event: Event): EventResult = {
Logger.debug(String.format(s"Found Client[${client.getName}]"));
subService.suspend(client)
Mailer.sendEmailClientSuspended(client)
WebHookEventDAO.completeEvent(event.getId)
EventResult.ok
}
我试图测试的主要逻辑是Mailer.sendEmailClientSuspended(client)使用正确的参数调用,例如传递正确的客户端。 是否值得将其拆分为一个单独的函数,以及在 Scala 中测试"对象"有多难,因为 Mailer 是一个对象。
假设你正在使用 MockitoSugar 和 ScalaTest 在 Scala 中编写测试,您希望使用 Mockito 库中的 ArgumentCaptor。这允许您捕获作为参数传递给基金会sendEmailClientSuspended(client)
的client
对象的值。
请参阅此堆栈溢出帖子,了解您可以遵循的工作示例。您需要指定客户端类所在的包,因此类似这样...
val capturedClient = ArgumentCaptor.forClass(classOf[com.acme.app.Client])
如果您的Mailer
对象当前没有扩展Trait
,请添加一个对象,以便您可以模拟 Trait 并对其调用 verify()
。
如果您不拥有 Mailer 的代码,则可以将调用移动到您编写的自己的帮助程序类中,然后可以模拟新的 Trait。像这样的东西...
trait MailerTrait {
def sendEmailClientSuspended(client: Client): Unit
}
object MyMailer extends MailerTrait () {
def sendEmailClientSuspended(client: Client): Unit = {
Mailer.sendEmailClientSuspended(client)
}
}