Mock NamedParameterJdbcTemplate with callback function

201 Views Asked by At

Im trying to mock NamedParameterJdbcTemplate inside LaAttributeRepo Calss having below method findFieldByItemId

 SqlParameterSource param = new MapSqlParameterSource("laIds", laIds);
 List < LaAttributes > laAttributes = jdbcTemplate.query("Select_query", param,
   (rs, rowNum) -> new LaAttributes(rs.getString("cloumn1"), rs.getString("cloumn2")));
 //jdbcTemplate is NamedParameterJdbcTemplate 

I need to mock it in test class below

@Test
public void findFieldsByItemId() {
  List < String > itemsId = new ArrayList < > ();
  itemsId.add("VZ203");
  //NamedParameterJdbcTemplate is mocked.
  Mockito.when(mockedNamedParameterJdbcTemplate.query(Mockito.anyString,
    Mockito.any(MapSqlParameterSource.class), Mockito.any(ResultSetExtractor.class))).thenAnswer(
    (invocationOnMock) -> {
      ResultSetExtractor < List < LaAttributes >> resultSetExtractor = invocationOnMock.getArgument(2);
      ResultSet rs = Mockito.mock(ResultSet.class);
      Mockito.when(rs.getString(ArgumentMatchers.eq("column1")))
      .thenReturn("column1");
      Mockito.when(rs.getString(ArgumentMatchers.eq("column2")))
      .thenReturn("column2");
      return resultSetExtractor.extractData(rs);
    });
  List < LaAttributes > laAttributes = laAttributeRepo.findFieldByItemId(ItemsId);
  Assert.assertEquals("column1", laAttributes.get(0).getColumnOne());
}

I am getting list as null for laAttributeRepo.findFieldByItemId(ItemId) Not sure what to do. Can anyone help ?

0

There are 0 best solutions below