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

如何使用ArchUnit校验指定类构造函数仅在符合要求的类中被调用

你可以直接使用ArchUnit提供的onlyBeCalled().byClassesThat()系列API实现需求,贴合你原本编写逻辑的实现代码如下:

import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.constructors;

// 测试类内部代码
@ArchTest
static final ArchRule events_must_be_created_by_aggregates =
        constructors()
                // 匹配所有Event子类的构造函数
                .that().areDeclaredInClassesThat().areAssignableTo(Event.class)
                // 限定这些构造函数仅允许被Aggregate及其子类调用
                .should().onlyBeCalled().byClassesThat().areAssignableTo(Aggregate.class)
                .because("聚合应当管理自身的生命周期与事件");

如果你的项目需要排除特定类(比如单元测试类、公共工具类等)的调用权限,可以在规则中叠加自定义过滤条件,示例如下:

@ArchTest
static final ArchRule events_must_be_created_by_aggregates =
        constructors()
                .that().areDeclaredInClassesThat().areAssignableTo(Event.class)
                // 排除test包下类的调用校验
                .and().areNotDeclaredInClassesThat().resideInAPackage("..test..")
                .should().onlyBeCalled().byClassesThat().areAssignableTo(Aggregate.class)
                .because("聚合应当管理自身的生命周期与事件");

内容的提问来源于stack exchange,提问作者Clément Poissonnier

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:15:00