Spock测试出现MonoJust输出及StepVerifier断言失败问题求助
问题原因及解决方法
核心原因
- 语法错误导致断言逻辑异常:你的
expectNext方法中的lambda表达式缺少闭合括号,使得expectComplete()和verify()没有正确绑定到StepVerifier实例,直接导致断言执行失败。 - 可能的断言值不匹配:如果
builder.createProduct()生成的product对象的productId不等于常量PRODUCT_ID,即使语法修复,断言也会失败。 - 拼写错误风险:
given块中的producteService疑似拼写错误(应为productService),如果实际服务名称是后者,会触发Spock的交互次数验证失败,间接影响测试结果。
解决方法
1. 修复语法错误
修正then块中的StepVerifier代码,补上lambda的闭合括号,确保调用链完整:
then: StepVerifier.create(result) .expectNext(product -> { assertThat(product.getProductId()).isEqualTo(PRODUCT_ID) }) // 补上该闭合括号 .expectComplete() .verify()
2. 确保断言值匹配
在创建测试用product时,显式指定productId为PRODUCT_ID,避免默认生成的值不匹配:
given: def product = builder.createProduct() product.setProductId(PRODUCT_ID) // 显式设置目标productId 1 * productService.findProduct(product.group, PRODUCT_ID) >> Mono.just(product)
3. 修正服务名称拼写
确认服务变量名正确,将producteService改为productService(如果实际服务名称是后者):
1 * productService.findProduct(product.group, PRODUCT_ID) >> Mono.just(product)
补充说明
直接打印result显示MonoJust是正常现象——Mono是响应式容器,MonoJust表示它包裹了一个非空的单值对象,必须通过StepVerifier订阅并验证容器内的实际内容,而非直接打印容器本身。
内容的提问来源于stack exchange,提问作者BreenDeen
相关产品推荐
相关产品推荐

