内部类的 Mockito 实例

问题描述 投票:0回答:1
simpleJDBCCall.returningResultSet("test", new RowMapper<SomeObject> {
  
@Override
public SomeObject mapRow(Resultset r, int i) throws sqlexception {

//-----some code----
return someObject;

}

}

我想使用mockito执行MapRow方法中编写的行

java mockito inner-classes
1个回答
0
投票

Mockito 用于存根方法,而不是真正用于 execute 方法。但这仍然是可能的:您可以使用 dynamic

Answer
来存根您的方法来调用传递对象的方法。

final var simpleJDBCCall = Mockito.mock(…);
when(simpleJDBCCall.returningResultSet(Mockito.anyString(), Mockito.any())).
    .thenAnswer(i -> {
      final RowMapper<SomeObject> rowMapper = i.getArgument(1);
      rowMapper.mapRow(…, …); // pass your desired ResultSet and integer
    });

现在在模拟实例上调用

returningResultSet
将立即调用第二个参数上的
mapRow
方法,并传递您指定的任何值。

但是请注意官方文档关于这种方式存根的说法:

另一个有争议的功能最初并未包含在 Mockito 中。我们建议简单地使用

thenReturn()
thenThrow()
进行存根,这应该足以测试/测试驱动任何干净简单的代码。

© www.soinside.com 2019 - 2024. All rights reserved.