我正在为下面的Java代码创建单元测试,该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类中模拟此方法:
query(String sql, RowMapper<T> rowMapper)
我已经试过了:
List<Pair<String, String>> pairList = ...;
Mockito.when(jdbcTemplate.query(Mockito.anyString(), Mockito.any(RowMapper.class))).thenReturn(pairList);
...但是当我运行单元测试时,通过代码行之后,“ list”变量始终为null,就好像没有触发模拟返回我的值一样。
Mockito对象肯定被注入到类中。
打印模拟的命令将显示以下内容:
[Mockito] Interactions of: Mock for NamedParameterJdbcTemplate, hashCode: <n>
1. namedParameterJdbcTemplate.query("query", my.package.MyClass$$Lambda$114/1274225913@3e134896);
我明显在做错什么吗?在此先感谢您的协助。
最佳答案
尝试Mockito.any(Function.class)
Mockito.when(jdbcTemplate.query(Mockito.anyString(), Mockito.any(Function.class))).thenReturn(pairList);
关于java - Mockito:模拟包含lambda表达式的方法调用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61091353/