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

如何mock标注@ConstructorBinding的配置属性类并解决final类报错

错误原因

@lombok.Value 注解默认会给标注的类添加 final 修饰符,而Mockito默认不支持mock final类,因此抛出上述错误。

修复方案

你可以根据实际场景选择以下任意一种方案:

方案1:开启Mockito对final类的mock支持(无侵入业务代码)

该方案不需要修改生产侧的代码,仅调整测试侧配置即可:

  • 在测试资源目录(一般为src/test/resources)下新建mockito-extensions文件夹
  • 在该文件夹下新建名为org.mockito.plugins.MockMaker的文件
  • 向文件中写入一行内容:mock-maker-inline

配置完成后重启测试即可支持final类的mock,不会影响原有配置类的不可变特性与配置绑定功能。

方案2:调整Lombok注解,取消类的final修饰(保留不可变特性)

如果不想修改Mockito配置,可以替换@Value注解为等价的不可变注解组合,避免类被标记为final:

@ConfigurationProperties
@ConstructorBinding
@Getter // 仅生成getter方法,不生成setter
@AllArgsConstructor // 提供全参数构造器,满足@ConstructorBinding的要求
@EqualsAndHashCode
@ToString
class PropertyConfig{
    // 所有属性仍用private final修饰,保持不可变
    // some code
}

调整后类不再是final类型,同时所有属性仍为不可变,完全兼容原有的配置绑定逻辑,也可被Mockito正常mock。

方案3:直接构造测试实例(无需mock)

由于配置属性类本身仅承载属性,无复杂业务逻辑,测试时可以直接调用构造方法手动构造符合测试要求的实例,不需要mock,这种方案最简单也最符合不可变类的使用习惯。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 06:45:04