使用ArchUnit测试模块内的包依赖关系



我在使用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..);

问题是,或条件应该在onlyAccessClassesThat((中。如果一个类同时具有两种类型的访问,则上述公式将失败,我希望这两种访问都是有效的。

我怎样才能实现我想要的?谢谢你在这方面的帮助。。。

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

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

最新更新