簡體   English   中英

如何使用Scala在lagom中為NoHostAvailableException編寫測試用例?

[英]How to write test case for NoHostAvailableException in lagom with Scala?

我有一個部分函數作為exceptionHandler ,它匹配相應的異常並相應地拋出。 我應該為NoHostAvailableException編寫一個測試用例,但我無法使用NoHostAvailableException拋出異常。

我已經制作了一個模擬服務器,它在 Lagom 中嵌入了 Cassandra。

這是偏函數。

private val handleException: PartialFunction[Throwable, Future[List[MonitoringData]]] = {
    case noHostAvailableException: NoHostAvailableException => throw new CassandraNotAvailableException(TransportErrorCode
        .fromHttp(Error.CassandraNotAvailableErrorCode), Error.ErrorMessageForCassandraNotAvailable)

    case _ => throw new TransportException(TransportErrorCode.InternalServerError, Error.ErrorMessageForInternalServerError)
}

這是測試用例。

"not be able to interact with the database in" {
    when(mockReadDAO.getData)
        .thenThrow(NoHostAvailableException)
    assert(thrown.isInstanceOf[NoHostAvailableException])
}

編譯器不會將NoHostAvailableException作為值。

注意類型之間的區別

NoHostAvailableException

和一個

new NoHostAvailableException(...)

val e: NoHostAvailableException = new NoHostAvailableException(...)

從概念上講,這類似於Int類型和值42之間的區別

val i: Int = 42

錯誤的含義

class com.datastax.driver.core.exceptions.NoHostAvailableException is not a value

告訴我們我們在期望值的位置使用類型。 因此嘗試

when(mockReadDAO.getData).thenThrow(new NoHostAvailableException(...))

代替

when(mockReadDAO.getData).thenThrow(NoHostAvailableException)

因為NoHostAvailableException構造函數將java.util.Map作為參數,嘗試像這樣提供空的java.util.HashMap

val emptyHashMap = new java.util.HashMap[InetSocketAddress, Throwable]() 
when(mockReadDAO.getData).thenThrow(new NoHostAvailableException(emptyHashMap))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM