【问题标题】:Mockito - Not able to Mock ResultSetMockito - 无法模拟结果集
【发布时间】: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 驱动程序来模拟/创建开发驱动的连接,完全隔离,没有任何可用于单元测试的存储

标签: scala mockito scalatest


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    • 1970-01-01
    • 2017-04-24
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    相关资源
    最近更新 更多