scala - Mockito - 无法模拟结果集
问题描述
我正在编写一个测试用例,试图模拟一个结果集。要做到这一点,我已经有了我的模拟
val mockedResultSet = mock[ResultSet]
val mockedRow = mock[Row]
现在,当我在我的 ResultSet 上调用这个模拟对象(如 .one() 或 .all() 或 .isExhausted )上的某些函数时,我能够获得所需的输出。例如
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 的映射函数行为。请让我知道如何在这种情况下模拟结果集。提前致谢 !!!
解决方案
通常不建议模拟您不拥有的对象(查看本文了解更多详细信息)
因此,理想情况下,在您的场景中,您将拥有一个存储库类,您将为其编写针对内存数据库的集成测试(我假设您使用 SQL 和 JDBC,因为您没有指定)所以您可以封装您的数据库交互在那里并经过适当的测试,然后当您必须测试系统中依赖于 in 的任何其他类时,您可以去模拟所述存储库。
现在,如果由于某种原因您仍然想模拟 ResultSet,那么很高兴知道您使用的是什么库以及在尝试存根 map 函数时遇到的确切错误。
推荐阅读
- dns - 如何将 www 和非 www 站点指向 Route53 中的 ALB
- javascript - 运行使用 PouchDB Asyncstorage 适配器的 Jest 测试时出现导入错误
- bios - 如何在 ACPI dsl/asl 源文件中区分 Windows、MacOS (Darwin) 和 Linux?
- python - 如何访问函数内部的列表而不返回它?
- java - 使用 Micronaut 提供静态资源,具有目录层次结构
- python - 通过玩一些文本文件来了解读写文件。在 Python 3 中
- sql-server - 如何让只读用户能够调用标量函数?
- kubernetes - 在生产中服务 ML 模型。TensorFlow 服务和自动缩放
- github - 如何在 github 存储库中添加这些提供有关存储库或包的信息的图像?
- sas - 日期是否出现在 SAS 中的指定时间段内