Scala testing Mailer.sendEmailClientSuspended



我在下面有以下代码,需要测试用户暂停时发送电子邮件。

  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)
    }
}

相关内容

  • 没有找到相关文章