насмешливый метод перегрузки queryForObject в JdbcTemplate - PullRequest
0 голосов
/ 27 марта 2019

Как смоделировать приведенный ниже код с помощью mockito?

@Override
@Nullable
public <T> T queryForObject(String sql, Object[] args, int[] argTypes, Class<T> requiredType)
        throws DataAccessException {

    return queryForObject(sql, args, argTypes, getSingleColumnRowMapper(requiredType));
}

Я пробовал ниже:

  @Test
    public void testGetCount(){

        Mockito.when(jdbcTemplate.queryForObject(ArgumentMatchers.anyString(),Mockito.refEq(Object[].class),
                Mockito.refEq(Integer[].class), Mockito.eq(Long.class)))
                .thenAnswer((Answer<Long>) invocation -> 2l);
        User user = new User(userDetails);
        Assert.assertEquals(2,dao.getCount(user));
    }

Обратите внимание, что я пробовал с Mockito.eq вместо Mockito.refEq,но закончилась с тем же результатом.

но он всегда вызывает следующий метод:

@Override
    public <T> T queryForObject(String sql, Class<T> requiredType, @Nullable Object... args) throws DataAccessException {
        return queryForObject(sql, args, getSingleColumnRowMapper(requiredType));
    }

Весь класс здесь:

    public class UserDetailsAggregationDaoTest {

        private final String userDetails = "10015-MTBD";

        @InjectMocks
        private UserDao dao = new UserDaoImpl();

        @Mock
        private JdbcTemplate jdbcTemplate;




   @Test
        public void testGetCount(){
            //Using Mockito.refEq
            Mockito.when(jdbcTemplate.queryForObject(ArgumentMatchers.anyString(),Mockito.refEq(Object[].class),
                    Mockito.refEq(Integer[].class), Mockito.eq(Long.class)))
                    .thenAnswer((Answer<Long>) invocation -> 2l);
            User user = new User(userDetails);
            Assert.assertEquals(2,dao.getCount(user));
        }


    }

Любая помощь будет оценена

1 Ответ

0 голосов
/ 29 марта 2019

Исправлено путем изменения, как показано ниже:

Mockito.when(jdbcTemplate.queryForObject(ArgumentMatchers.anyString(),Mockito.any(Object[].class),Mockito.any(int[].class), Mockito.eq(Long.class)))
            .thenReturn(2l);
...