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

标签 java 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 不存在,而且我没有找到任何可以让我实现这样的测试的东西。

最佳答案

每当您错过预定义 Fluent 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()));
                }
            }
        }
    });

关于java - 如何使用 ArchUnit 检查是否在正确的类中调用了构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69723542/

相关文章:

java - 循环没有给出想要的结果,卡住了

java - 如何使 SWT 浏览器控件在 Linux(Ubuntu 14) 上使用 Mozilla/Firefox 而不是 WebKit

java - 如何在 ArchUnit 规则中排除某个类?

java - ArchUnit - 确保方法参数被注释

java - Archunit 包 A 不能访问包 B,除了子包 A.X 可以访问 B.Y

java - 为什么我的代码不能发挥应有的作用? (文件写入器,jTable)

java - Hibernate @ManyToOne 映射错误

java - 对 VoronoiDiagramBuilder.setClipEnvelope 使用多边形而不是矩形

java - ArchUnit 似乎没有缓存分析的类