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

AssertJ是否存在可返回被测原始对象的断言谓词?

AssertJ获取原始对象的实现方案

AssertJ本身没有直接提供名为getOriginalObject()的方法,但可以通过以下两种方式实现你的需求:

方法一:用asInstanceOf()转回原对象类型

在断言链中通过asInstanceOf()方法将断言对象转回原始类型,就能继续后续操作,示例代码:

CLS cls = assertThat(new CLS(a, b, c))
    .extracting("property1", "property2").isEqualTo(x, y)
    .asInstanceOf(InstanceOfAssertFactories.type(CLS.class));

assertThat(cls.method(n)).predicates();

方法二:自定义断言类(适合高频场景)

如果需要频繁做这类初始状态验证+保留原对象的操作,建议自定义针对CLS的断言类,封装逻辑同时提供获取原对象的入口:

public class CLSAssert extends AbstractAssert<CLSAssert, CLS> {

    public CLSAssert(CLS actual) {
        super(actual, CLSAssert.class);
    }

    public static CLSAssert assertThat(CLS actual) {
        return new CLSAssert(actual);
    }

    // 封装初始状态验证逻辑
    public CLSAssert hasInitialState(Object x, Object y) {
        isNotNull();
        assertThat(actual.property1()).isEqualTo(x);
        assertThat(actual.property2()).isEqualTo(y);
        return this; // 返回断言实例,支持链式调用
    }

    // 获取原始对象
    public CLS get() {
        return actual;
    }
}

使用方式更简洁:

CLS cls = CLSAssert.assertThat(new CLS(a, b, c))
    .hasInitialState(x, y)
    .get();

assertThat(cls.method(n)).predicates();

额外优化:无需单独存变量的写法

如果不需要单独保存原对象变量,也可以直接在断言链内完成后续验证:

assertThat(new CLS(a, b, c))
    .extracting("property1", "property2").isEqualTo(x, y)
    .asInstanceOf(InstanceOfAssertFactories.type(CLS.class))
    .satisfies(cls -> assertThat(cls.method(n)).predicates());

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 16:12:02