如何使用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
相关产品推荐
相关产品推荐

