如何使用 Scala 在 lagom 中为 NoHostAvailableException 编写测试用例?

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

我有一个部分函数 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 作为值。

注意 type

之间的区别
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))