如何在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
相关产品推荐
相关产品推荐

