我在使用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()中。如果一个类同时拥有两种类型的访问,上面的公式就会失败,我希望它是有效的。
我怎样才能实现我想要的?感谢你在这方面的帮助...
发布于 2020-09-19 13:18:55
您可以指定provide the predicate作为方法参数,并将其与另一个谓词组合:
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.."))
)
https://stackoverflow.com/questions/63884832
复制