Mockito: mocking a method call that contains a lambda expression
我正在为下面的Java代码创建单元测试,该Java代码从数据库获取数据,并通过lambda将检索到的数据映射到列表中:
1 2 3 4 5 |
它是Spring框架服务类的一部分;单元测试通过SpringJUnit4ClassRunner运行。
我已经使用Mockito模拟了jdbcTemplate对象(类型为NamedParameterJdbcTemplate)。
我正在尝试模拟jdbcTemplate的结果。查看方法调用,看来我需要在NamedParameterJdbcTemplate类中模拟此方法:
1 |
我已经尝试过了:
1 2 |
...但是当我运行单元测试时,在传递了代码行之后," list "变量始终为null,就像没有触发模拟返回我的值一样。 >
Mockito对象肯定被注入到类中。
打印模拟的语音将显示以下内容:
1 2 | [Mockito] Interactions of: Mock for NamedParameterJdbcTemplate, hashCode: <n> 1. namedParameterJdbcTemplate.query("query", my.package.MyClass$$Lambda$114/1274225913@3e134896); |
我显然在做错什么吗?预先感谢您的协助。
我将模拟的配置移动到了创建的位置:
1 2 3 4 5 6 7 8 9 10 11 12 | @Bean(name ="jdbcTemplate") public NamedParameterJdbcTemplate jdbcTemplate() { NamedParameterJdbcTemplate jdbcTemplate = Mockito.mock(NamedParameterJdbcTemplate.class); Pair<String, String> pair = new Pair<String, String>(CODE, NAME); List<Pair<String, String>> pairList = new ArrayList<Pair<String, String>>(); pairList.add(pair); Mockito.when(jdbcTemplate.query(Mockito.anyString(), Mockito.any(RowMapper.class))).thenReturn(pairList); return jdbcTemplate; } |
现在可以使用。
尝试
1 | Mockito.when(jdbcTemplate.query(Mockito.anyString(), Mockito.any(Function.class))).thenReturn(pairList); |