издеваться, когда несколько RestTemplate - PullRequest
0 голосов
/ 13 июня 2019

У меня есть несколько resttempletes, настроенных для моего проекта springboot. Я не могу смоделировать индивидуальный шаблон для моего тестового случая.

Я пытался с тем же именем издеваться, насмешка не происходит.

Вот моя конфигурация

@Bean
    public RestTemplate restTemplateA(RestTemplateBuilder builder) {
        return builder
                .setConnectTimeout(2000)
                .setReadTimeout(5000)
                .basicAuthorization(aUsername, aPassword)
                .build();
    }

    @Bean
    public RestTemplate restTemplateB(RestTemplateBuilder builder) {
        return builder
                .setConnectTimeout(20000)
                .setReadTimeout(50000)
                .build();
    }

    @Bean
    public RestTemplate restTemplateC(RestTemplateBuilder builder) {
        return builder
                .setConnectTimeout(20000)
                .basicAuthorization(bUsername, bPassword)
                .setReadTimeout(50000)
                .build();
    }

Фактический вызов resttemplate, который работает нормально, и нам нужно написать контрольный пример:

ResponseEntity<AClass> responseEntity = restTemplateB.exchange(uriBuilder.toUriString(),
                    HttpMethod.GET, entity, AClass.class);

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

@Mock
private RestTemplate restTemplateB;

@Test
public void test_B() throws Exception {
        AClass response = gson.fromJson(
                FileUtils.readFileToString(ResourceUtils.getFile("classpath:sample/AJson.json"),
                        Charset.forName("utf-8")),
                AClass.class);
        ResponseEntity<AClass> responseEntity = new ResponseEntity<>(response,
                HttpStatus.ACCEPTED);
        Mockito.when(restTemplateB.exchange(Mockito.any(), Mockito.any(HttpMethod.class),
                Mockito.any(HttpEntity.class),
                Mockito.<ParameterizedTypeReference<AClass>>any()))
                .thenReturn(responseEntity);
        service.testMethod("abc");
        assertNotNull(responseEntity.getBody());
    }

Исключение:

org.springframework.web.client.ResourceAccessException: I/O error on GET request for "http://abc/": Connect to abc:80 [abc/10.25.100.11] failed: Connection refused: connect; nested exception is org.apache.http.conn.HttpHostConnectException: Connect to abc:80 [abc/101.252.110.100] failed: Connection refused: connect

1 Ответ

0 голосов
/ 13 июня 2019

Это единица измерения или интеграционный тест?

Если это модульный тест, имя бина не имеет значения, просто вставьте макет боба в класс, который вы пытаетесь протестировать при создании экземпляра underTest (службы).

Если это интеграционный тест, не используйте @Mock, используйте @MockBean, чтобы вставить макет bean-компонента в контекст приложения (чтобы он мог переопределить bean-компоненты в вашем контексте). MockBean также имеет параметр name, который можно использовать для переопределения определенного именованного компонента.

...