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

如何调整构造器参数逻辑解决EqualsVerifier测试校验报错问题

解决方案

问题根因为EqualsVerifier默认会通过反射生成任意类型的参数调用构造器,你仅配置了Configuration类的预制值,并没有覆盖构造器入参URI类型的生成规则,因此会生成无效URI触发校验报错。

方法1:调整测试配置,新增URI类型预制值(最推荐)

不需要改动业务代码,仅需要给EqualsVerifier补充URI类型的合法预制值即可,修改后测试代码如下:

@Test
void Should_RespectEqualsContract() {
    EqualsVerifier
        .forClass(Configuration.class)
        // 给URI类型配置合法预制值,EqualsVerifier就不会自行生成无效URI
        .withPrefabValues(
            URI.class,
            URI.create("http://a.com"),
            URI.create("http://b.com"))
        .verify();
}

方法2:用工厂方法指定实例生成规则

如果你有多个复杂构造参数,也可以通过withFactory方法直接告诉EqualsVerifier如何构造合法的Configuration实例:

@Test
void Should_RespectEqualsContract() {
    EqualsVerifier
        .forClass(Configuration.class)
        .withFactory(
            () -> new Configuration(URI.create("http://a.com")),
            () -> new Configuration(URI.create("http://b.com"))
        )
        .verify();
}

方法3:调整构造器校验逻辑(不推荐,除非业务有需求)

如果确实需要修改业务代码兼容测试,可以在校验逻辑前增加规则判断,避免误拦截测试用特殊参数,这种方式会弱化业务校验规则,仅在特殊场景下使用:

public record Configuration(URI url) {
  public Configuration(URI url) {
    // 可根据业务需求调整判断规则,仅符合前提的参数执行校验
    if (url != null && url.getScheme() != null && url.getScheme().startsWith("http")) {
        Validate.httpValid(url, "url");
    }
    this.url = url;
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 15:36:03