【发布时间】:2018-08-09 05:40:54
【问题描述】:
我正在编写一个尝试模拟结果集的测试用例。为了做到这一点,我已经有了我的模拟
val mockedResultSet = mock[ResultSet]
val mockedRow = mock[Row]
现在,当我在这个模拟对象上调用某些函数时,例如 .one() 或 .all() 或 .isExhausted 在我的 ResultSet 上,我能够获得所需的输出。例如
doReturn(mockedRow).when(mockedResultSet).one()
或
doReturn(true).when(mockedResultSet).isExhausted
但是,在某些方法中,我直接在 resultSet 上应用 map 函数,而不是在其上应用 .all()。例如:-
val results = executeDBStatement(dBConnection, queryBuilderStmt)
if (!results.isExhausted) {
val res = results.map(row => {
// iterate over the result and create a list of case classes
}
)
}
这里我无法模拟 ResultSet 的 map 函数行为。请让我知道如何在这种情况下模拟结果集。提前谢谢!!!
【问题讨论】:
-
模拟 JDBC 具有挑战性,因为它需要连贯地模拟一大堆相关的类。我建议看一下框架Acolyte,它提供了一个 JDBC 驱动程序来模拟/创建开发驱动的连接,完全隔离,没有任何可用于单元测试的存储