Как отключить springSecurityFilterChain в тестовом примере?

Привет, у меня есть весенний проект, в котором есть пружинная безопасность для аутентификации пользователей с использованием поставщика OAUTH, и мне нужно использовать Spring Cloud Contract для создания фиктивного сервера для потребительского тестирования.

репозиторий: https://github.com/Isaacwhyuenac/spring-cloud-contract-poc/blob/main/order-service/src/test/java/com/example/producer/BaseClass.java

Когда я бегу ./gradlew clean :order-service:contractTest. Вылетает следующая ошибка

delegate cannot be null. Ensure a Bean with the name springSecurityFilterChain implementing Filter is present or inject the Filter to be used.
java.lang.IllegalStateException: delegate cannot be null. Ensure a Bean with the name springSecurityFilterChain implementing Filter is present or inject the Filter to be used.

Если вы посмотрите на мой SecurityConfig

https://github.com/Isaacwhyuenac/spring-cloud-contract-poc/blob/main/order-service/src/main/java/com/example/producer/config/SecurityConfig.java

Фильтр безопасности уже настроен. Итак, как решить эту ошибку и заставить мой contractTest работать правильно ??

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
80
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Есть некоторые проблемы с BaseClass.

  1. Если вы используете последнюю версию Spring Boot, достаточно использовать @SpringBootTest. Не надо @ExtendedWith
  2. Используйте Mock env, установите webEnvironment = Mock
  3. Если вы решили использовать RestAssuredMockMvc, вам следует использовать этот mockMvc вместо стандартного MockMVC в своих тестах.
  4. Mockito.reset в очистке вообще не нужен.

В проекте WebMvc исключите UserDetailsServiceAutoConfiguration и SecurityAutoConfiguration в тестовом контексте, проверьте мой пример.

В проекте WebFlux просто исключите ReactiveUserDetailsServiceAutoConfiguration, ReactiveSecurityAutoConfiguration и ReactiveOAuth2ResourceServerAutoConfiguration (если сервер ресурсов oauth2 включен) в кодах тестирования.

@SpringBootTest
@ImportAutoConfiguration(exclude = {ReactiveUserDetailsServiceAutoConfiguration.class, ReactiveSecurityAutoConfiguration.class})
class YourTest{
}

Или протестируйте веб-контроллер.

@WebFluxTest(controller=YourController.calss, excludeAutoConfigurations = {ReactiveUserDetailsServiceAutoConfiguration.class, ReactiveSecurityAutoConfiguration.class})
class YourTest{
}

Несколько лет назад я создал простой образец микросервиса, который использовал Spring Cloud Contract и Pact для реализации шаблона CDC при тестировании и проверке API, проверьте spring-microservice-sample.

После того, как я добавил аннотации, ошибка все еще существует... Я протестировал как реактивные, так и нереактивные аннотации...

whyuenacccc 18.11.2022 13:07

В ваших кодах много проблем, вы смешали много тестовых фич. Пожалуйста, прочитайте часть тестирования, чтобы начать.

Hantsy 18.11.2022 13:58

И, конечно же, я надеюсь, что вы прочитали официальный семинар Spring Cloud Contract, чтобы узнать, как использовать Spring Cloud Contract.

Hantsy 18.11.2022 14:01

Согласитесь, намешано много тестовых фич. У меня возникли проблемы с разделением интеграционного теста и элементов функционального теста... Я не хотел создавать одни и те же POJO снова и снова. Если бы вы были на моем месте, как бы вы их разделили?? Есть ли у вас какие-либо советы??

whyuenacccc 18.11.2022 14:47

ваш образец репо выглядит великолепно. Позвольте мне учиться учиться

whyuenacccc 18.11.2022 15:05

Этот ответ решает автоконфигурацию, связанную с весенней безопасностью, но не решает мою проблему в весеннем облачном контракте с Kafka...

whyuenacccc 21.11.2022 07:46

Другие вопросы по теме