Для моего приложения Spring -Boot я предоставляю RestTemplate, хотя файл @Configuration, поэтому я могу добавить разумные значения по умолчанию (ex Timeouts). Для моих интеграционных тестов я хотел бы высмеять RestTemplate, поскольку я не хочу подключаться к внешним сервисам - я знаю, какие ответы ожидать. Я попытался предоставить другую реализацию в пакете интеграции-теста в надежде, что последний переопределит реальную реализацию, но проверка журналов выглядит наоборот: реальная реализация переопределяет тестовую.
Как я могу убедиться, что тот из TestConfig используется?
Это мой конфигурационный файл:
@Configuration
public class RestTemplateProvider {
private static final int DEFAULT_SERVICE_TIMEOUT = 5_000;
@Bean
public RestTemplate restTemplate(){
return new RestTemplate(buildClientConfigurationFactory());
}
private ClientHttpRequestFactory buildClientConfigurationFactory() {
HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
factory.setReadTimeout(DEFAULT_SERVICE_TIMEOUT);
factory.setConnectTimeout(DEFAULT_SERVICE_TIMEOUT);
return factory;
}
}
Тест интеграции:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = TestConfiguration.class)
@WebAppConfiguration
@ActiveProfiles("it")
public abstract class IntegrationTest {}
Класс TestConfiguration:
@Configuration
@Import({Application.class, MockRestTemplateConfiguration.class})
public class TestConfiguration {}
И, наконец, MockRestTemplateConfiguration
@Configuration
public class MockRestTemplateConfiguration {
@Bean
public RestTemplate restTemplate() {
return Mockito.mock(RestTemplate.class)
}
}