使用 ArchUnit 测试模块内的包依赖性
Test package dependencies within a module with ArchUnit
我在使用 ArchUnit 制定以下测试时遇到问题:
我想确保某个包中的所有 classes 仅访问应用程序基础包之外或某个子包内的 classes(“或”不是“异或”) .
我得到的是:
@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() 中。如果 class 具有两种类型的访问权限,则上述公式将失败,我希望这两种类型都有效。
我怎样才能达到我想要的?
感谢您对此的任何帮助...
您可以指定提供谓词作为方法参数并将其与另一个谓词组合:
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.."))
)
我在使用 ArchUnit 制定以下测试时遇到问题:
我想确保某个包中的所有 classes 仅访问应用程序基础包之外或某个子包内的 classes(“或”不是“异或”) .
我得到的是:
@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() 中。如果 class 具有两种类型的访问权限,则上述公式将失败,我希望这两种类型都有效。
我怎样才能达到我想要的? 感谢您对此的任何帮助...
您可以指定提供谓词作为方法参数并将其与另一个谓词组合:
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.."))
)