Классы ArchUnit должны зависеть только от определенных классов из пакета - PullRequest
0 голосов
/ 18 марта 2020

У меня есть два отдельных пакета:

mycomp.sales
- Order
- OrderPlaced
mycom.delivery
- Delivery
- OrderPlacedListener (depends on mycomp.sales.OrderPlaced)

Я хочу установить правило, которое проверяет, что пакет mycom.delivery имеет только зависимость от OrderPlaced и не имеет других классов в пакете mycomp.sales .

До сих пор я придумал следующее:

JavaClasses importedClasses = new ClassFileImporter().importPackages("mycomp.delivery");
ArchRule rule = classes()
        .should().onlyDependOnClassesThat().resideOutsideOfPackages("mycomp.sales..")
        .orShould().onlyDependOnClassesThat().areAssignableTo(OrderPlaced.class);
rule.check(importedClasses);

Но это не удается на OrderPlacedListener (который имеет зависимость от mycomp.sales.OrderPlaced).

Как сделать это?

1 Ответ

1 голос
/ 18 марта 2020

В вашем коде оба предложения OR оцениваются по отдельности, это означает, что либо 1. все зависимости должны быть вне mycomp.sales.. (что не так), либо 2. все зависимости должны быть присвоены OrderPlaced (что, очевидно, нет).

Вы должны определить составное правило следующим образом:

ArchRule rule = classes()
    .should().onlyDependOnClassesThat(
        resideOutsideOfPackages("mycomp.sales..")
            .or(type(OrderPlaced.class)));
...