Я пытаюсь использовать mockito для макета jdbcTemplate и вызова запроса метода, передавая его параметры, используя Object [] {}.
Я делаю модульный тест для моего уровня DAO. Я хочу смоделировать jdbcTemplate, вызвать метод, передать строку sql, RowMapper и параметры, используя Object [] {}
public List<EntityType> myDaoMethod(Date fechaInicio, Date fechaFin)
throws NotDataFoundException {
log.info("entering => myDaoMethod");
log.info("param => fechaInicio :" + fechaInicio);
log.info("param => fechaFin :" + fechaFin);
log.debug("Se ejecutando consulta...");
try {
List<EntityType> query = jdbcTemplate.query(QueryStrs.MY_QUERY,
new Object[] {fechaInicio, fechaFin},
new BeanPropertyRowMapper<EntityType>(EntityType.class));
log.debug("Se ejecuto consulta. ");
return query;
}catch(DataAccessException e) {
log.error("No se encontro informacion en la consulta myDaoMethod (2)", e);
throw new NotDataFoundException(e);
}finally {
log.info("exiting => myDaoMethod");
}
}
@Mock
private JdbcTemplate jdbcTemplate;
@Test
public void myTestMethod() throws NotDataFoundException {
List<EntityType> listValue = new ArrayList<>();
listValue.add(new EntityType((short) 2, "modem 2"));
listValue.add(new EntityType((short) 1, "modem"));
when(jdbcTemplate.query(any(String.class),any(Object[].class), any(BeanPropertyRowMapper.class))).thenReturn(listValue);
MyDao dao = new MyDaoImpl(jdbcTemplate);
List<EntityType> otrasAdicionalesPorRangoFecha = dao.myDaoMethod(any(Date.class), any(Date.class));
Assert.assertNotNull(otrasAdicionalesPorRangoFecha);
Assert.assertTrue(!otrasAdicionalesPorRangoFecha.isEmpty());
// Assert.assertArrayEquals(listValue.toArray(), otrasAdicionalesPorRangoFecha.toArray());
}
Результат трассировки
org.mockito.exceptions.misusing.InvalidUseOfMatchersException:
Неправильное использование сопоставителей аргументов!
Ожидается 3 матча, 2 записано:
-> at com.oracle.reporter.tddtest.rrhhcomision.OtrasAdicionalesDaoTest.testBuscarOtrasAdicionalesPorFecha (OtrasAdicionalesDaoTest.java:80)
-> at com.oracle.reporter.tddtest.rrhhcomision.OtrasAdicionalesDaoTest.testBuscarOtrasAdicionalesPorFecha (OtrasAdicionalesDaoTest.java:80)
Это исключение может возникнуть, если сопоставления объединяются с необработанными значениями:
// неправильно:
someMethod (anyObject (), "raw String");
При использовании совпадений все аргументы должны быть предоставлены сопоставителями.
Например:
//правильный:
someMethod (anyObject (), eq ("String by matcher"));