我正在写一个测试案例,试图模拟一个结果集。为此,我已经准备好了模拟游戏
val mockedResultSet = mock[ResultSet]
val mockedRow = mock[Row]
现在,当我在ResultSet上调用此模拟对象上的某些函数(例如.one()或.all()或.isExhausted)时,便能够获得所需的输出。对于
doReturn(mockedRow).when(mockedResultSet).one()
或
doReturn(true).when(mockedResultSet).isExhausted
但是,在某些方法中,我直接在resultSet上应用映射函数,而不是在其上应用.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的映射函数行为。请让我知道在这种情况下如何模拟resultSet。在此先感谢!!!
答案 0 :(得分:0)
通常不建议模拟您不拥有的对象(有关更多详细信息,请查看this文章)
因此,理想情况下,您将有一个存储库类,您将针对该存储库类针对内存数据库编写集成测试(我假设您未指定使用SQL和JDBC),因此您拥有了数据库交互被封装在那里并经过适当测试,然后当您必须测试系统中依赖于in的任何其他类时,可以去模拟所述存储库。
现在,如果由于某种原因您仍然想模拟ResultSet,那么在尝试对地图函数进行存根时,很高兴知道您正在使用哪个库以及遇到了什么确切错误。