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

Equalsverifier在quarkus:dev模式下运行测试失败如何解决

问题原因

该错误是Quarkus Dev模式的字节码增强机制导致的:EqualsVerifier默认通过反射直接修改类的private final字段来构造测试用例,本地IDE运行测试时不会加载Quarkus的类增强逻辑,反射操作可以正常执行;而在Quarkus Dev模式下,被测类被Quarkus的类加载器做了字节码增强,final字段的反射写入操作被限制,因此抛出异常。

解决方案

方案1:调整EqualsVerifier测试配置(最优方案,无业务侵入)

显式指定EqualsVerifier使用被测类的现有构造函数创建实例,无需反射修改final字段,修改测试类代码如下:

package a;

import nl.jqno.equalsverifier.EqualsVerifier;
import org.junit.jupiter.api.Test;

class DingetjeTest {
    @Test
    void implementsEquals() {
        EqualsVerifier.forClass(Dingetje.class)
                .withNonnullFields("text")
                // 指定使用参数为String的构造函数创建实例
                .withConstructor(String.class)
                .verify();
    }
}

该方案无需修改业务代码和Quarkus全局配置,仅调整测试逻辑即可解决问题。

方案2:排除被测类的Quarkus字节码增强

如果被测类不需要Quarkus的依赖注入、拦截器等增强能力,可以在src/main/resources/application.properties中添加如下配置,排除该类的增强处理:

quarkus.arc.exclude-types=a.Dingetje

注意如果该类是Quarkus管理的Bean,使用该方案会导致相关注解失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 15:45:05