У меня есть приложение, которое отлично работает в Spring Boot 2.3.8, но @RestClientTest
не работает с 2.4.2, потому что тестовые объекты не могут быть созданы, потому что нет bean-компонента @ConfigurationProperties
(который создается @TestConfiguration
).
Как мне изменить свой код, чтобы он работал с 2.4.x?
Код:
@Configuration
@ConfigurationProperties(prefix = "tyntec.routetest.dsidr")
@Data
@Validated
public class DynamicSenderIdReplacementClientConfiguration {
@NotBlank
private String baseUrl;
@NotBlank
private String dsidrPath;
}
@Component
@RequiredArgsConstructor
public class DynamicSenderIdReplacementClient {
private final DynamicSenderIdReplacementClientConfiguration configuration;
}
@ExtendWith(SpringExtension.class)
@RestClientTest(DynamicSenderIdReplacementClient.class)
@AutoConfigureWebClient(registerRestTemplate = true)
class DynamicSenderIdReplacementClientWebTest {
@Autowired
private DynamicSenderIdReplacementClient cut;
@TestConfiguration
static class testConfiguration {
@Bean
@Primary
public DynamicSenderIdReplacementClientConfiguration provideConfig() {
return new DynamicSenderIdReplacementClientConfiguration() {
{
setBaseUrl(BASE_URL);
setDsidrPath(DSIDR_PATH);
}
};
}
}
Это работает в 2.3.8, но не работает в 2.4.2 с
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.tyntec.routetesting.client.itest.clients.DynamicSenderIdReplacementClientConfiguration' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
Оказывается, @RestClientTest
работает, как рекламируется, и подавляет бобы в @TestConfiguration
:
Использование этой аннотации отключит полную автоматическую настройку и вместо этого применять только конфигурацию, относящуюся к тестам остальных клиентов (например, Джексон или автонастройка GSON и
@JsonComponent
bean-компоненты, но не обычные@Component
фасоль).
Использование @Import
помогает.
@RestClientTest(DynamicSenderIdReplacementClient.class)
@AutoConfigureWebClient(registerRestTemplate = true)
@Import(DynamicSenderIdReplacementClientWebTest.testConfiguration.class)
class DynamicSenderIdReplacementClientWebTest {
Собирая вещи из приведенных выше фрагментов, ваш пример отлично работает для меня с Spring Boot 2.4.1 с bean-компонентом
DynamicSenderIdReplacementClientConfiguration
, определенным вtestConfiguration
, который вводится вDynamicSenderIdReplacementClient
. Можете ли вы обновить свой вопрос полным и минимальным примером, который воспроизводит вашу проблему?