#java #unit-testing #testing #mockito
#java #модульное тестирование #тестирование #mockito
Вопрос:
Невозможно смоделировать данные BeanPropertyRowMapper в тестовом классе. Пробовал с разными сценариями. Может кто-нибудь, пожалуйста, помочь мне в этом.
Он возвращает нулевой объект dtoResposne , но возвращает данные в объекте dto. Здесь утверждение завершается ошибкой, пока мы сравниваем с dto с помощью dtoResponse.
Приведенный ниже код связан с классом DaoImpl
public Dto getViewData(String requestId, List<String> errorLsist) {
String sql = "SELECT * FROM table WHERE id = ?";
return (Dto) getJdbcTemplate().queryForObject(sql, new Object[] { requestId },
new BeanPropertyRowMapper(Dto.class));
}
Below code is related to test class
String sql = "SELECT * FROM dom.deployment WHERE request_id = ?";
List<Dto> data = new ArrayList<>();
Dto dto = new Dto();
dto.setDecisionFlowGuid(guid);
data.add(dto);
Mockito.when(jdbcTemplate.query(
"SELECT * FROM dom.deployment WHERE request_id = " requestId,
new BeanPropertyRowMapper<>(Dto.class))).thenReturn(data);
Dto dtoResponse = deploymentDaoUtilImpl.getViewData(requestId, errors);
assertEquals(dto, dtoResponse);
Tried with below scenarios as well.
Mockito.when((Dto) jdbcTemplate.queryForObject(sql, new Object[] { requestId },
new BeanPropertyRowMapper<Dto>(Dto.class))).thenReturn(dto);
Mockito.when((Dto) jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Dto.class)))
.thenReturn(dto);
Ответ №1:
«JdbcTemplate» должен быть сначала создан как макет (т.Е. Mockito.mock), а затем макет вводится как зависимость вызывающему.
Затем ваш макет.когда ниже необходимо обернуть объект, который вы пытаетесь смоделировать, и функция появляется после. Просмотрите синтаксис в примерах / docs online.
Mockito.when(jdbcTemplate.query(
"SELECT * FROM dom.deployment WHERE request_id = " requestId,
new BeanPropertyRowMapper<>(Dto.class))).
Комментарии:
1. Спасибо за ответ… Я уже издевался над JdbcTemplet, но все равно получаю данные ответа как null. Dto dtoResponse = deploymentDaoUtilImpl.getViewData(RequestID, ошибки); для приведенного выше я получаю данные ответа как null. @Mock JdbcTemplate JdbcTemplate; как и выше, я издевался над JdbcTemplet
Ответ №2:
Проблема решена с помощью приведенного ниже кода
BeanPropertyRowMapper mapper = new BeanPropertyRowMapper((Dto.class));
Mockito.when(jdbcTemplate.queryForObject(eq(sql), eq(new Object[] { requestId }), any(BeanPropertyRowMapper.class))).thenReturn(dto);
Dto dtoResponse = deploymentDaoUtilImpl.getViewData(requestId, errors);
assertEquals(dto, dtoResponse);