Spring boot feign конфигурация тестирования интеграции клиента - PullRequest
0 голосов
/ 30 марта 2020

Добрый день. Я пытаюсь написать интеграционный тест Feign, заданный c, и указать конфигурацию c, чтобы включить автоматическую настройку симуляции. Похоже, что

@Profile({Profiles.FEIGN_INTEGRATION_TEST, Profiles.PROD, Profiles.DEV, Profiles.STAGE})
@Configuration
@EnableFeignClients
public class FeignEnabler {
}

и в моем тесте (спецификация Spock)

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureWireMock
@ActiveProfiles(Profiles.FEIGN_INTEGRATION_TEST)
class MyServiceSpec extends Specification {

   @Subject
   @Autowired
   MyService myService
}

MyService использует RestClient

@Profile({Profiles.FEIGN_INTEGRATION_TEST, Profiles.PROD, Profiles.DEV, Profiles.STAGE})
@FeignClient(name = "myRestClient", url = "${feign.client.config.myclient.url}")
public interface RestClient

К сожалению, появляется исключение для спецификации выполняющегося теста

Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.myapplication.web.RestClient' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}

Для этой проблемы необходимо добавить тренировку @EnableFeignClients в @SpringBootApplication классе, но таким образом он портится с другими тестами (в моем случае тесты срезов DataJpa), и чтобы избежать этого, мне нужно добавить эту строку кода

@ImportAutoconfiguration({RibbonAutoConfiguration.class, FeignRibbonClientAutoConfiguration.class, FeignAutoConfiguration.class})

, как описано здесь https://github.com/spring-projects/spring-boot/issues/7270 для каждого интеграционного теста, без использования FeignAutoConfiguration, и я действительно не хочу этого делать ...

...