замена OAuth2 WebClient в тесте - PullRequest
0 голосов
/ 14 января 2020

У меня есть небольшой пакет 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 для получения фиктивного токена? Есть ли библиотека, которая обеспечивает это как можно больше из коробки?
...