我有一个exceptionHandler
部分函数,它与相应的异常匹配并相应地引发。
我应该为NoHostAvailableException
编写一个测试用例,但无法使用模拟抛出异常。
我已经制作了一个模拟服务器,可以将嵌入式Cassandra嵌入Lagom。
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
作为值。
答案 0 :(得分:1)
请注意类型
之间的区别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))