0

我无法用 ArchUnit 制定以下测试:

我想确保某个包中的所有类只访问应用程序基础包之外或某个子包内的类(“或”而不是“xor”)。

我得到的是:

@AnalyzeClasses(packages = "com.example")
public class ClassDependencies {
    @ArchTest
    static final ArchRule deps = classes.that()
        .resideInAPackage("com.example.mymodule.some.package")
        .should().onlyAccessClassesThat().resideOutsideOfPackage("com.example..")
        .orShould().resideInAnyPackage("com.example.package1..", "com.example.package2..);

问题是,or 条件应该在 onlyAccessClassesThat() 内。如果一个类具有两种类型的访问权限,则上述公式将失败,我希望这是有效的。

我怎样才能达到我想要的?感谢您对此的任何帮助...

4

1 回答 1

2

您可以指定提供谓词作为方法参数并将其与另一个谓词组合:

classes
    .that().resideInAPackage("com.example.mymodule.some.package")
    .should().onlyAccessClassesThat(
        JavaClass.Predicates.resideOutsideOfPackage("com.example..")
        .or(JavaClass.Predicates.resideInAnyPackage("com.example.package1..", "com.example.package2.."))
    )
于 2020-09-19T13:18:55.350 回答