You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

响应式Java的JUnit测试报错:预期200 OK,实际404 NOT_FOUND

Spring WebFlux Controller测试404 NOT_FOUND问题解决

问题核心原因

你的测试类与目标控制器类完全同名(均为FluxAndMonoController),导致Spring测试上下文加载时出现Bean注册混淆,没有正确加载实际的控制器组件,因此测试请求/flux时返回404。

而Postman/浏览器访问正常,是因为生产环境的应用上下文不受测试类影响,能正确扫描并注册控制器Bean。

解决方案

1. 重命名测试类并明确指定测试目标控制器

将测试类重命名(比如改为FluxAndMonoControllerTest),同时在@WebFluxTest注解中显式指定要测试的控制器类,确保测试上下文只加载目标Bean:

@WebFluxTest(FluxAndMonoController.class)
public class FluxAndMonoControllerTest {

    @Autowired
    WebTestClient webTestClient;    

    @Test
    public void flux_approach1(){

        Flux<Integer> integerFlux = webTestClient.get().uri("/flux")
                .accept(MediaType.APPLICATION_JSON)
                .exchange() 
                .expectStatus().isOk()
                .returnResult(Integer.class)
                .getResponseBody();

        StepVerifier.create(integerFlux)
                .expectSubscription()
                .expectNext(1)
                .expectNext(2)
                .expectNext(3)
                .expectNext(4)
                .verifyComplete();
    }
}

2. 移除冗余注解

无需添加@ExtendWith(SpringExtension.class),因为@WebFluxTest注解已经包含了该扩展的功能,添加后不会解决问题,反而增加冗余代码。

额外验证点

  • 如果控制器和测试类不在同一个包下,@WebFluxTest默认只会扫描测试类所在包的组件,此时必须通过@WebFluxTest(FluxAndMonoController.class)显式指定控制器类,否则测试上下文无法加载到目标控制器。
  • 确保项目依赖中spring-boot-starter-test和spring-boot-starter-webflux版本匹配,避免因依赖版本不一致导致的上下文加载问题。

内容的提问来源于stack exchange,提问作者Kartik Mathur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 17:25:18