如何在 Java 中使用 Mockito 模拟结果集并填充它

新手上路,请多包涵

我有我填充 ResultsetCallableStatement.executeQuery() 的代码。我嘲笑 ResultSetCallableStatement 但为了测试我必须填充的方法 ResultSet

这是我正在测试的方法的代码

ResultSet rset = cs.executeQuery();
while (rset.next()) {
IndexVolatilityImpl tsImpl = new IndexVolatilityImpl();
tsImpl.setTradeDate(rset.getString("trade_date"));
tsImpl.setTradeTime(rset.getString("trade_time"));
tsImpl.setExprDate(rset.getString("expr_date"));
tsImpl.setSymbol(rset.getString("symbol"));
tsImpl.setTradePrice(rset.getDouble("trade_price"));
tsImpl.setContractMonth(rset.getString("contract_month"));
tsImpl.setMilliSecs(rset.getString("trade_time_thou"));
colIndexVolatilityImpl.add(tsImpl);

我现在已经模拟了 CallableStatement 和 ResultSet,因为它们被模拟了,我的 rset 变成了空的。我想填充结果集并按如下方式进行

resultSetMock = Mockito.mock(ResultSet.class);
Mockito.when(resultSetMock.getString("trade_date")).thenReturn("03/10/2011");
Mockito.when(resultSetMock.getString("trade_time")).thenReturn("12:24:56");
Mockito.when(resultSetMock.getString("expr_date")).thenReturn("03/19/2011");
Mockito.when(resultSetMock.getString("symbol")).thenReturn("VIX1");
Mockito.when(resultSetMock.getDouble("trade_price")).thenReturn(Double.valueOf("20.96"));
Mockito.when(resultSetMock.getString("contract_month")).thenReturn("1");
Mockito.when(resultSetMock.getString("trade_time_thou")).thenReturn("165");

Mockito.doReturn(resultSetMock).when(callableStatementMock).executeQuery();

但是 rsetnull

原文由 Tejas Shah 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
1 个回答

您还应该模拟 next() 方法,让它在第一次调用时返回 true,因为 mockito 将返回 false 默认情况下。

 Mockito.when(resultSetMock.next()).thenReturn(true).thenReturn(false);

原文由 proactif 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题