spring - 带有 Mockito 模拟的 Spring Boot NamedParameterJdbcTemplate
问题描述
尝试对定义为的方法进行单元测试:
public void myMethod(List<? extends MyModel> model){
int[] result = namedParameterJdbcTemplate.batchUpdate("update query", SqlParameterSourceUtils.createBatch(model));
}
在我的测试类中,我将测试方法定义为
class MyTestClass{
@Mock
NamedParameterJdbcTemplate namedParameterJdbcTemplate;
@InjectMocks
MyDao dao;
@Test
public void testMyMethod() {
final int[] rowsAffected = new int[]{1,2};
when(namedParameterJdbcTemplate.batchUpdate(any(), SqlParameterSourceUtils.createBatch(Arrays.asList(anySet())))).thenReturn(rowsAffected);
List<MyModel> myModels = new ArrayList<>();
MyModel mymodel = new MyModel();
mymodel.setSomeParam("");
myModels.add(mymodel);
dao.myMethod(myModels);
}
}
在运行此测试方法时,我在被调用的方法(myMethod())中得到 NullPointerException。int[] 结果为空。我的理解是它应该从模拟中的存根中得到结果。请帮助我理解我做错了什么。
解决方案
它通过将演员添加到参数匹配器来工作:更新代码:
when(namedParameterJdbcTemplate.batchUpdate(anyString(), (SqlParameterSource[]) any())).thenReturn(rowsAffected);
推荐阅读
- node.js - Node/Express - 如何更改默认根 URL
- r - 删除尾随空格并合并 R 中可能重复的因素
- npm - 解决 npm shrinkwrap peer 无效依赖
- swift - 无法安装“GoogleSignIn”Pod
- python - 为什么我不能在 Pandas 中保留一些变量并重命名变量?
- python - 如何从 hdf5 文件加载预训练的权重以用于 keras 中的时间分布层?
- jquery - 无法让 boostrap 3 导航栏正确显示活动颜色
- android - 使用 Kotlin 多行字符串和 Room 添加缩进后数据库迁移失败
- r - 删除组内的重复项?
- android - 自定义字体未在网站的移动版本上加载