首页 > 解决方案 > 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 的映射函数行为。请让我知道如何在这种情况下模拟结果集。提前致谢 !!!

标签: scalamockitoscalatest

解决方案


通常不建议模拟您不拥有的对象(查看本文了解更多详细信息)

因此,理想情况下,在您的场景中,您将拥有一个存储库类,您将为其编写针对内存数据库的集成测试(我假设您使用 SQL 和 JDBC,因为您没有指定)所以您可以封装您的数据库交互在那里并经过适当的测试,然后当您必须测试系统中依赖于 in 的任何其他类时,您可以去模拟所述存储库。

现在,如果由于某种原因您仍然想模拟 ResultSet,那么很高兴知道您使用的是什么库以及在尝试存根 map 函数时遇到的确切错误。


推荐阅读