我偶然发现了下面的片段。
ArchRule myRule = classes()
.that().resideInAPackage("..core..")
.should().onlyBeAccessed().byAnyPackage("..controller..");我想知道如何否定这个条件,所以测试应该检查core包是否被controller包访问?
发布于 2022-02-02 19:23:59
您可以使用ClassesShould.accessClassesThat(),它(正如它的JavaDoc建议的那样)通常使用否定的方式更有意义:
import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.noClasses;
// ...
noClasses()
.that().resideInAPackage("..controller..")
.should().accessClassesThat().resideInAPackage("..core..");您还可以坚持使用classes(),并使用GivenClasses.should(…)或GivenClassesConjunction.should(…)和灵活的ArchCondition。对于您的情况,它可以很容易地由预定义的条件和谓词组成。
import static com.tngtech.archunit.core.domain.JavaClass.Predicates.resideInAPackage;
import static com.tngtech.archunit.lang.conditions.ArchConditions.accessClassesThat;
import static com.tngtech.archunit.lang.conditions.ArchConditions.not;
import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.classes;
// ...
classes()
.that().resideInAPackage("..controller..")
.should(not(accessClassesThat(resideInAPackage("..core.."))));https://stackoverflow.com/questions/70958792
复制相似问题