【问题标题】:How to mock getJdbcTemplate().queryForObject()?如何模拟 getJdbcTemplate().queryForObject()?
【发布时间】:2011-11-26 18:52:46
【问题描述】:

我成功嘲讽了

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

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

请告诉我如何模拟

getJdbcTemplate().queryForObject();

我不知道应该模拟哪个对象。

【问题讨论】:

  • 嘿真的不应该模拟你不拥有的类型,在你的情况下尤其是 JDBC 的东西。改为编写集成测试!
  • 谢谢布莱斯。发布此问题后,我意识到了这一点。

标签: spring mockito


【解决方案1】:

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

假设你的 DAO 类也实现了 RowMapper 接口来模拟方法queryForObject(string,rowMapper,Object...)

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-16
      • 1970-01-01
      • 1970-01-01
      • 2018-04-16
      • 1970-01-01
      • 2014-11-26
      相关资源
      最近更新 更多