如何检查构造函数是否在正确的类中调用ArchUnit?



是否有办法在ArchUnit中强制执行这样的规则:

@ArchTest
static final ArchRule events_must_be_created_by_aggregates =
noConstructors().that().areDeclaredInClassesThat().areAssignableTo(Event.class).should().beCalledInClassesThat().areNotAssignableFrom(Aggregate.class)
.because("the aggregate should manage its own lifecycle and events");

这里的问题是beCalledInClassesThat不存在,我找不到任何可以让我实现这样一个测试的东西。

当您在预定义的流畅API中错过某些内容时,请尝试定义自定义谓词/条件。在你的情况下:这对你有用吗?

@ArchTest
static final ArchRule events_must_be_created_by_aggregates = constructors()
.that().areDeclaredInClassesThat().areAssignableTo(Event.class)
.should(new ArchCondition<JavaConstructor>("be called from aggregates") {
@Override
public void check(JavaConstructor constructor, ConditionEvents events) {
for (JavaConstructorCall call : constructor.getCallsOfSelf()) {
if (!call.getOriginOwner().isAssignableTo(Aggregate.class)) {
events.add(SimpleConditionEvent.violated(call, call.getDescription()));
}
}
}
});

最新更新