尝试单元测试定义为以下内容的方法:
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[]结果为空。我的理解是它应该从模拟中的存根得到结果。请帮助我理解我做错了什么。
2条答案
按热度按时间owfi6suc1#
您似乎没有使用正确的导入
any()
因为如果它是正确的ArgumentMatchers.any()
从mockito,mockito会抱怨你没有使用ArgumentMatcher
对于的两个参数.batchUpdate()
.您可以使用
import static org.mockito.ArgumentMatchers.*;
或使用ArgumentMatchers.any()
.因此,作为第一步,请尝试以下操作:
或者不太通用,并匹配
SqlParameterSourceUtils.createBatch()
使用:uoifb46i2#
它通过将强制转换添加到参数匹配器来工作:更新的代码: