如何用scala在lagom中编写nohostavailableexception的测试用例?

368yc8dk  于 2021-06-10  发布在  Cassandra
关注(0)|答案(1)|浏览(384)

我有一个局部函数 exceptionHandler 它匹配相应的异常并相应地抛出。我应该为你写一个测试用例 NoHostAvailableException ,但我无法使用mocking抛出异常。
我已经做了一个模拟服务器,使嵌入式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 作为价值。

yrefmtwq

yrefmtwq1#

注意类型之间的区别

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))

相关问题