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

如何在Spock测试中验证Spring响应式类抛出异常

问题分析与修复方案

核心问题

你的测试代码中,StepVerifier仅定义了预期错误,但没有触发Reactive流的订阅。Reactor的Mono属于冷流,只有当流被订阅时,才会执行包括switchIfEmpty在内的整个逻辑链,自然不会抛出预期的异常。

修复后的测试代码

在then块中添加verify()方法,触发订阅与验证流程:

then: 'A NotFoundException is thrown from the service'
StepVerifier.create(result)
    .expectError(NotFoundException)
    .verify() // 关键:启动验证,触发流执行

额外验证点

  • 确认productRepository已正确Mock(比如通过Spock的Mock注解初始化),确保findProductById(id)确实返回Mono.empty()。
  • 检查NotFoundException的全类名一致性,确保测试代码与服务代码中引用的是同一个异常类,避免因包路径不同导致匹配失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 20:35:18