У меня есть небольшой пакет Spring Boot 2.2, который пишет в OAuth2 REST API.
Я смог настроить WebClient
после https://medium.com/@asce4s / oauth2-with-spring-webclient-761d16f89cdd , и он работает, как и ожидалось.
@Configuration
public class MyRemoteServiceClientOauth2Config {
@Bean("myRemoteService")
WebClient webClient(ReactiveClientRegistrationRepository clientRegistrations) {
ServerOAuth2AuthorizedClientExchangeFilterFunction oauth =
new ServerOAuth2AuthorizedClientExchangeFilterFunction(
clientRegistrations,
new UnAuthenticatedServerOAuth2AuthorizedClientRepository());
oauth.setDefaultClientRegistrationId("myRemoteService");
return WebClient.builder()
.filter(oauth)
.build();
}
}
Однако теперь я хотел бы написать интеграционный тест для своего пакета и не использовать «настоящий» сервер авторизации для получения токена: я не хочу, чтобы мой тест сбой, если внешний сервер не работает. Я хочу, чтобы мой тест был "автономным".
Удаленная служба, которую я вызываю, заменяется на mockserver
фальшивую во время моих тестов.
Какова наилучшая практика в этом случае?
- Что мне подходит, так это включить вышеуказанный конфиг только за пределами тестов с
@Profile("!test")
и запустить мои тесты с @ActiveProfiles("test")
. Я также импортирую спецификацию теста c в моем тесте:
@Configuration
@Profile("test")
public class BatchTestConfiguration {
@Bean("myRemoteService")
public WebClient webClientForTest() {
return WebClient.create();
}
}
Но я чувствую, что добавление @Profile("!test")
в мою производственную конфигурацию не велико ..
- существует ли более «чистый» способ заменить используемый мной компонент WebClient на тот, который будет вызывать мою поддельную удаленную службу без предварительной попытки получения токена? Я попытался поместить
@Primary
в мой bean-компонент webClientForTest, но он не работает: рабочий бин все еще включается, и я получаю исключение:
Нет подходящего бина типа ' org.springframework.security.oauth2.client.registration.ReactiveClientRegistrationRepository
, который является типом параметра, который нужен производственному компоненту
- мне нужно запустить поддельный сервер авторизации как часть моего теста и настроить WebClient для получения фиктивного токена? Есть ли библиотека, которая обеспечивает это как можно больше из коробки?