насмешливый обмен шаблонами всегда возвращает ноль - PullRequest
1 голос
/ 09 апреля 2019

Я пытаюсь смоделировать метод restTemplate.exchange с помощью mockito, но он всегда возвращает нулевое значение, независимо от того, что я возвращаю через mock, даже если я выбрасываю исключение:

это фактический код:

ResponseEntity<List<LOV>> response = restTemplate.exchange(url, GET, null,new ParameterizedTypeReference<List<LOV>>() {});

код mockito:

 ResponseEntity<List<LOV>> mockResponse = new ResponseEntity<List<LOV>>(mockLovList() ,HttpStatus.ACCEPTED);

Mockito.when(restTemplate.exchange(any(), eq(GET), any(), ArgumentMatchers.<ParameterizedTypeReference<List<LOV>>>any())).thenReturn(mockResponse);

Каждый аргумент имеет тип ArgumentMatchers в обмене mock, mockLovList () возвращает список LOV

, который должен возвращать любойя издевался, но он всегда возвращает ноль

Ответы [ 2 ]

0 голосов
/ 09 апреля 2019

Вот рабочий пример фиктивного теста RestTemplate.exchange():

import org.junit.Assert;
import org.junit.Test;
import org.mockito.Mockito;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;

import java.util.Arrays;
import java.util.List;

import static org.mockito.Mockito.*;

public class MyTest {

    @Test
    public void testRestTemplateExchange() {
        RestTemplate restTemplate = mock(RestTemplate.class);

        HttpEntity<String> httpRequestEntity = new HttpEntity<>("someString");

        List<String> list = Arrays.asList("1", "2");
        ResponseEntity mockResponse = new ResponseEntity<>(list, HttpStatus.ACCEPTED);
        when(restTemplate.exchange(anyString(), any(), any(), any(ParameterizedTypeReference.class), any(Object[].class)))
                .thenReturn(mockResponse);


        final ResponseEntity<List<String>> exchange = restTemplate.exchange("/someUrl", HttpMethod.GET, httpRequestEntity, new ParameterizedTypeReference<List<String>>() {
        });

        Assert.assertEquals(list, exchange.getBody());

    }

}
0 голосов
/ 09 апреля 2019

Сначала вы можете проверить правильность вызова метода, используя

 Mockito.verify(restTemplate).exchange(any(), eq(GET), any(), any(ParameterizedTypeReference.class)))

Mockito показывает очень хороший вывод, включая фактический вызов метода.

Кроме того, вы можете обратиться к Deep Stubbing или Тестирование анонимных классов

...