模拟多个jdbcTemplate.queryForObject不起作用

问题描述 投票:1回答:1

我的问题是,如果我模拟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);
'''

java mocking jdbctemplate
1个回答
0
投票

您应该对同一对象进行一次模拟而不是多次模拟,但不要使用结果而是使用方法进行模拟

  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
   }
});
© www.soinside.com 2019 - 2024. All rights reserved.