Mockito-无法模拟ResultSet

时间:2018-08-09 05:40:54

标签: scala mockito scalatest

我正在写一个测试案例,试图模拟一个结果集。为此,我已经准备好了模拟游戏

  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。在此先感谢!!!

1 个答案:

答案 0 :(得分:0)

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

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

现在,如果由于某种原因您仍然想模拟ResultSet,那么在尝试对地图函数进行存根时,很高兴知道您正在使用哪个库以及遇到了什么确切错误。