【问题标题】:Test package dependencies within a module with ArchUnit使用 ArchUnit 测试模块中的包依赖关系
【发布时间】:2020-09-14 12:58:46
【问题描述】:

我无法使用 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() 中。如果一个类具有两种类型的访问权限,则上述公式将失败,我希望这是有效的。

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

【问题讨论】:

    标签: archunit


    【解决方案1】:

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

    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.."))
        )
    

    【讨论】:

      猜你喜欢
      • 2015-12-28
      • 1970-01-01
      • 2015-02-04
      • 2021-10-17
      • 1970-01-01
      • 1970-01-01
      • 2011-04-22
      • 1970-01-01
      • 2018-09-01
      相关资源
      最近更新 更多