无法在测试 class 中模拟 BeanPropertyRowMapper class

Unable to Mock BeanPropertyRowMapper class in test class

无法在测试中模拟 BeanPropertyRowMapper 数据 class。尝试了不同的场景。有人可以帮我解决这个问题吗?

它正在返回 null dtoResposne 对象,但它正在返回 dto 对象中的数据。当我们将 dto 与 dtoResponse 进行比较时,此处断言失败。

以下代码是相关的DaoImpl class

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);

“jdbcTemplate”必须首先创建为 Mock(即 Mockito.mock),然后将 mock 作为调用者的依赖项注入。

然后你下面的 Mockito.when 需要包装你试图模拟的 object 并且函数在后面。在线复习 examples/docs 中的语法。

   Mockito.when(jdbcTemplate.query(
                "SELECT * FROM dom.deployment WHERE request_id = " + requestId,
                new BeanPropertyRowMapper<>(Dto.class))).

问题已通过以下代码解决

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);