【问题标题】:Unable to Mock BeanPropertyRowMapper class in test class无法在测试类中模拟 BeanPropertyRowMapper 类
【发布时间】:2021-03-15 12:39:22
【问题描述】:

无法在测试类中模拟 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);

【问题讨论】:

    标签: java unit-testing testing mockito


    【解决方案1】:

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

    然后你的 Mockito.when 下面需要包装你试图模拟的 object 并且函数紧随其后。在线查看示例/文档中的语法。

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

    【讨论】:

    • 感谢您的回复...我已经模拟了 JdbcTemplet,但我仍然将响应数据设为空。 Dto dtoResponse = deploymentDaoUtilImpl.getViewData(requestId, errors);对于上面我得到的响应数据为空。 @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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-16
      • 1970-01-01
      相关资源
      最近更新 更多