我尝试测试返回对象数组的路由,但测试失败,因为它返回Unauthorized而不是200 OK
我的测试课
@RunWith(SpringRunner.class)
@WebFluxTest(value = CatController.class)
class ContentManagementTestApplicationTests {
@Autowired
ApplicationContext context;
@Autowired
private WebTestClient webTestClient;
@MockBean
CatRepository catRepository;
@BeforeEach
public void setup(){
webTestClient=WebTestClient.bindToApplicationContext(context)
.apply(SecurityMockServerConfigurers.springSecurity())
.configureClient()
.build();
}
@Test
void contextLoads() {
}
@Test
public void getApprovedCats(){
webTestClient.get()
.uri("/cat")
.accept(MediaType.APPLICATION_JSON)
.exchange()
.expectStatus().isOk();
}
}
和应用程序安全配置类,有一个安全网络过滤器链Bean
@Bean
SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http, AuthConverter jwtAuthConverter, AuthManager jwtAuthManager){
AuthenticationWebFilter jwtFilter = new AuthenticationWebFilter(jwtAuthManager);
jwtFilter.setServerAuthenticationConverter(jwtAuthConverter);
return http .csrf().disable()
.authorizeExchange()
.pathMatchers(HttpMethod.GET,"/cat").permitAll()
.anyExchange()
.authenticated()
.and()
.addFilterAt(jwtFilter, SecurityWebFiltersOrder.AUTHORIZATION)
.formLogin().disable()
.httpBasic().disable()
.build();
}
JUint测试上的错误显示如下
java.lang.AssertionError:预期状态:〈200 OK〉,但实际为:〈401 UNAUTHORIZED〉预期状态:200 OK实际状态:401 UNAUTHORIZED
在测试失败并显示未授权之前,在控制台中打印"使用生成的安全密码:8e5dd468 - 3fd1 - 42b6 - 864a-c4c2ed2227b7 "我认为不应打印该内容,因为我在securityFilterChain中禁用了它
1条答案
按热度按时间nhhxz33t1#
从
@WebFluxTest
的Javadoc开始:可用于仅关注Spring WebFlux组件的Spring WebFlux测试的注解。使用此注解将禁用完全自动配置,而仅应用与WebFlux测试相关的配置
如果您希望加载完整的应用程序配置并使用WebTestClient,则应该考虑将@SpringBootTest与@AutoConfigureWebTestClient结合使用,而不是使用此注解。
换句话说,在测试中使用
@WebFluxTest
时,SecurityWebFilterChain
不会被选中。试着用
@SpringBootTest
来注解你的类。