насмешка над несколькими jdbcTemplate.queryForObject не работает - PullRequest
1 голос
/ 03 октября 2019

Моя проблема в том, что если я 3 раза имитирую jdbcTemplate.queryForObject (), то работает только первый макет, а 2 других макета возвращаются с нулем. Что не так с этим кодом? Любая помощь приветствуется. Спасибо.

 //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);
'''

1 Ответ

0 голосов
/ 03 октября 2019

вы должны скорее издеваться над одним и не многократно одним и тем же объектом, но вы не насмехаетесь, используя результат, а используя метод

  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
   }
});
...