我有一个作为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/