Как сделать макет метода JdbcTemplate.queryForObject () - PullRequest
0 голосов
/ 24 октября 2019

Я новичок в Junit и Mockito, и я не понимаю, как написать контрольный пример для нижеприведенного JdbcTemplate, и я пытался, но получаю исключение. Может ли кто-нибудь помочь мне, пожалуйста

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: 
Invalid use of argument matchers!

Код

@Repository
public class BaaisnEvcIdMSRepository {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Transactional
    public RowMapperServerResponse getQueryEvcidRepository(BaaisnEvcIdRequest baaisnEvcIdRequest) {
        RowMapperServerResponse rowMapperServerResponse =  jdbcTemplate.queryForObject(
            "select * from Master_Circuit WHERE master_ckt_id =  ( select max(master_ckt_id)  from master_circuit  WHERE product = ? AND id_type = ?)",
            new Object[]{baaisnEvcIdRequest.getProduct_type(),baaisnEvcIdRequest.getLata()}, new BaaisnRowMapper());
        return rowMapperServerResponse;
    }
}

тестовый класс

public class BaaisnEvcIdMSRepositoryTest {

    @InjectMocks
    BaaisnEvcIdMSRepository baaisnEvcIdMSRepository;

    @Mock
    JdbcTemplate jdbcTemplate;

    @Before
    public void setup() {
        MockitoAnnotations.initMocks(this);
    }

    @Test
    public void getQueryEvcidRepositoryTest() {


          when(jdbcTemplate.queryForObject(eq(ArgumentMatchers.anyString()), refEq(new Object[]{ArgumentMatchers.anyInt()}), eq(String.class))).thenReturn("data");

          verify(jdbcTemplate, times(1)).queryForObject(eq(ArgumentMatchers.anyString()), refEq(new Object[]{ArgumentMatchers.anyInt()}), eq(String.class));

    }

}

1 Ответ

1 голос
/ 24 октября 2019

InvalidUseOfMatchersException исходит от использования вами eq(ArgumentMatchers.anyString()) и refEq(new Object[]{ArgumentMatchers.anyInt()}). Вы не должны заключать ArgumentMatchers во что-то еще.

Вы также, похоже, нацелены на неправильный queryForObject метод. Вместо этого это должно быть one.

Как упоминалось ранее, вам необходимо позвонить на method under test перед проверкой.

@Test
public void getQueryEvcidRepositoryTest() {

    // use a real `BaaisnEvcIdRequest` object if you can
    BaaisnEvcIdRequest req = Mockito.mock(BaaisnEvcIdRequest.class);
    Mockito.when(req.getProduct_type()).thenReturn(1);
    Mockito.when(req.getLata()).thenReturn(new Object());

    Object[] array = new Object[]{req.getProduct_type(),req.getLata()};

    Mockito.when(jdbcTemplate.queryForObject(Mockito.anyString(), Mockito.eq(array), Mockito.any(RowMapper.class)))
           .thenReturn("data");

    baaisnEvcIdMSRepository.getQueryEvcidRepository(req);

    Mockito.verify(jdbcTemplate, Mockito.times(1))
           .queryForObject(Mockito.anyString(), Mockito.eq(array), Mockito.any(RowMapper.class));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...