【发布时间】:2020-04-08 00:05:14
【问题描述】:
我正在为以下 Java 代码创建一个单元测试,该代码从数据库中获取数据,并通过 lambda 将检索到的数据映射到一个列表中:
List<Pair<String, String>> list = jdbcTemplate.query(MY_QUERY, (rs, rowNum) -> {
String code = rs.getString(1);
String name = rs.getString(2);
return new Pair<String, String>(code, name);
});
它是 Spring 框架服务类的一部分;单元测试通过 SpringJUnit4ClassRunner 运行。
我使用 Mockito 来模拟 jdbcTemplate 对象(类型为 NamedParameterJdbcTemplate)。
我正在尝试模拟 jdbcTemplate 的结果。看方法调用,貌似需要在NamedParameterJdbcTemplate类中mock这个方法:
query(String sql, RowMapper<T> rowMapper)
我试过这个:
List<Pair<String, String>> pairList = ...;
Mockito.when(jdbcTemplate.query(Mockito.anyString(), Mockito.any(RowMapper.class))).thenReturn(pairList);
...但是当我运行单元测试时,“list”变量在这行代码通过后总是为空,好像没有触发mock返回我的值。
Mockito 对象肯定被注入到类中。
打印模拟的调用会显示:
[Mockito] Interactions of: Mock for NamedParameterJdbcTemplate, hashCode: <n>
1. namedParameterJdbcTemplate.query("query", my.package.MyClass$$Lambda$114/1274225913@3e134896);
有什么我明显做错了吗?提前感谢您的帮助。
【问题讨论】:
标签: java spring unit-testing mockito