如何禁用springSecurityFilterChain在测试用例?



嗨,我有一个spring项目,它具有spring安全性,可以使用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正常运行??

BaseClass存在一些问题。

  1. 如果您使用的是最新的Spring Boot,使用@SpringBootTest就足够了。不需要@ExtendedWith
  2. 使用Mock环境,设置webEnvironment = Mock
  3. 如果你决定使用RestAssuredMockMvc,你应该在测试中使用这个mockMvc而不是标准的mockMvc。
  4. 清理过程中根本不需要Mockito.reset

在WebMvc项目中,排除UserDetailsServiceAutoConfigurationSecurityAutoConfiguration在您的测试上下文中,检查我的例子。

在WebFlux项目中,只排除ReactiveUserDetailsServiceAutoConfigurationReactiveSecurityAutoConfigurationReactiveOAuth2ResourceServerAutoConfiguration(如果oauth2资源服务器启用)在你的测试代码。

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

或测试web控制器。

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

几年前我创建了一个简单的微服务示例,它使用Spring Cloud Contract和Pact实现了API测试和验证中的CDC模式,检查Spring - Microservice -sample。

相关内容

最新更新