2014-01-13 45 views
1

我有以下一段代碼,需要測試用戶被暫停時發送的電子郵件。Scala測試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(客戶端)被調用,e.g正確的客戶端正確的參數表是傳遞。是否值得將它分解爲一個獨立的函數,並且由於Mailer是一個對象,所以測試Scala中的'Object'有多困難。

回答

0

假設您使用MockitoSugar and ScalaTest在斯卡拉編寫測試,您希望使用Mockito庫中的ArgumentCaptor。這允許您將作爲參數傳入的client對象的值捕獲到資金sendEmailClientSuspended(client)

請參閱this stackoverflow post對於您可以遵循的工作示例。你需要指定包中的客戶端類是,所以這樣的事情...

val capturedClient = ArgumentCaptor.forClass(classOf[com.acme.app.Client]) 

如果您Mailer對象不程度Trait目前,添加一個這樣你就可以嘲笑的特質和呼叫verify()就可以了。

如果您不擁有Mailer的代碼,則可以將調用移出到您編寫的自己的助手類中,然後可以模擬新的Trait。像這樣的東西...

trait MailerTrait { 
    def sendEmailClientSuspended(client: Client): Unit 
} 

object MyMailer extends MailerTrait() { 
    def sendEmailClientSuspended(client: Client): Unit = { 
     Mailer.sendEmailClientSuspended(client) 
    } 
}