Добрый день. Я пытаюсь написать интеграционный тест 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, и я действительно не хочу этого делать ...