如何模拟getJdbcTemplate()。queryForObject()?

时间:2011-11-26 18:52:46

标签: spring mockito

我成功嘲笑

JdbcTemplate jdbcTemplate = getJdbcTemplate();
jdbcTemplate.queryForObject();

JdbcTemplate jdbcTemplate = mock(JdbcTemplate.class);
when(jdbcTemplate.queryForObject(JdbcTwitterDao.SQL_SELECT_TWITTER, parameterizedRowMapper, 1)).thenReturn(expectedObject);

请您告诉我如何模拟

getJdbcTemplate().queryForObject();

我不知道应该嘲笑哪个对象。

2 个答案:

答案 0 :(得分:3)

如果您正在寻找如何模拟可变长度参数方法:

假设您的DAO类还为模拟方法queryForObject(string,rowMapper,Object...)

实现了RowMapper接口
    JdbcTemplate jdbcTemplateMock = Mockito.mock(JdbcTemplate.class);
    ReflectionTestUtils.setField(yourDao, "jdbcTemplate", jdbcTemplateMock);
    Mockito.when(jdbcTemplateMock.queryForObject(Mockito.anyString(),Mockito.any(dao.getClass()) ,Mockito.anyVararg())).thenReturn(entity);

答案 1 :(得分:2)

如果您使用JdbcDaoSupport作为基类来获取模板,您可以在测试中构建DAO并立即在其上setJdbcTemplate(mockJdbcTemplate)将其替换为模拟。