我的问题是,如果我模拟jdbcTemplate.queryForObject()3次,则只有第一个模拟有效,而其他2个模拟返回null。此代码有什么问题?欢迎任何帮助。谢谢。
//this works correctly and returns 1
Mockito.when(jdbcTemplate.queryForObject(eq("select count(*) from TEST_TABLE_1"), (MapSqlParameterSource) any(), eq(Integer.class))).thenReturn(1);
//this returns null
Mockito.when(jdbcTemplate.queryForObject(eq("select count(*) from TEST_TABLE_11"),(MapSqlParameterSource) any(), eq(Integer.class))).thenReturn(2);
//this returns null as well
Mockito.when(jdbcTemplate.queryForObject(eq("select count(*) from TEST_TABLE_111"), (MapSqlParameterSource) any(), eq(Integer.class))).thenReturn(3);
'''
您应该对同一对象进行一次模拟而不是多次模拟,但不要使用结果而是使用方法进行模拟
Mockito.when( jdbcTemplate.queryForObject(any()), (MapSqlParameterSource) any(), eq(Integer.class)))).thenAnswer(new Answer() {
Object answer(InvocationOnMock invocation) {
Object[] args = invocation.getArguments();
Object mock = invocation.getMock();
if(//here you check if test_1 or 11 or...){
return 1;//depending on the arg
}
});