NoHostAvailableException

NoHostAvailableException

我有一个作为exceptionHandler的部分函数,​​它匹配相应的异常并相应地引发。
我应该为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))

关于scala - 如何使用Scala在Lagom中编写NoHostAvailableException的测试用例?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55353010/

10-13 02:26