Gar*_*ead 3 java junit spring mockito spring-boot
我在 Spring Boot(v.2.2.1.RELEASE)应用程序的 Java 类中有以下代码:
@Inject
private JdbcTemplate jdbcTemplate;
@Inject
private MyRowCallbackHandler myRowCallbackHandler;
public void myMethod() {
jdbcTemplate.query(MY_QUERY, myRowCallbackHandler);
}
Run Code Online (Sandbox Code Playgroud)
JDBC 模板对象是 org.springframework.jdbc.core.JdbcTemplate 的实现,处理程序是 org.springframework.jdbc.core.RowCallbackHandler 的实现。
使用 JUnit 版本 4 和 Mockito,我可以模仿通过查询方法从数据库检索一行或多行,从而调用处理程序的 processRow() 方法吗?
感谢您的任何帮助。
我在自己的代码中遇到了这个问题,我想在这里分享解决方案,尽管它与上面的情况略有不同,因为我也模拟了 jdbcTemplate。
@InjectMocks
private JdbcOperationRepository jdbcOperationRepository;
@Mock
private NamedParameterJdbcTemplate mockJdbcTemplate;
@Test
public void testMyResults() {
final ResultSet mockResult1 = mock(ResultSet.class);
when(mockResult1.getString(MY_COLUMN)).thenReturn(value);
// ... other when statements to mock the returned data
doAnswer(invocation -> {
RowCallbackHandler callbackHandler = invocation.getArgument(2);
callbackHandler.processRow(mockResult1);
callbackHandler.processRow(mockResult2);
return null;
}).when(mockJdbcTemplate).query(any(), any(), any(RowCallbackHandler.class));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3142 次 |
| 最近记录: |