模拟多个 jdbcTemplate.queryForObject 不起作用

mocking multiple jdbcTemplate.queryForObject doesn'twork

我的问题是,如果我 mock jdbcTemplate.queryForObject() 3 次,则只有第一个 mock 可以使其他 2 个 mock return 为 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
   }
});