当前位置: 首页 > 知识库问答 >
问题:

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

艾宁
2023-03-14

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

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

共有1个答案

尚棋
2023-03-14

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

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规则,验证服务类(由Spring注释所指出)只使用自己包中的存储库,而不使用其他包中的存储库。 或者,我可以做: 但是,我重复包名3次,我需要为每个包定义这个规则。

  • 问题内容: 我在一个模块中有一个测试类,该模块在其依赖项模块之一中扩展了另一个测试类。如何将依赖项的测试代码导入到依赖模块的测试范围中? 首先,我有两个模块,“ module-one”是对“ module-two”的依赖。是的子类。 但是构建失败了,因为没有将“模块一”的测试代码导入到“模块二”中,而只是将其导入到主代码中。 问题答案: 通常,除了常规的modulename.jar文件之外,还可以

  • 应用程序 SlidingMenu(源文件) SlidingMenu-Maps-Support(源文件) 这里有一个链接,看看我的意思。 这就是我得到的错误。 谢谢! 编辑1:不要紧!我又回到月食了!Android Studio还没有为真正的项目开发做好准备。

  • 我有一个使用Maven和Java的多模块项目。我现在正在尝试迁移到Java 9/10/11并实现模块(如JSR376:Java Platform Module System,JPMS)。由于项目已经由Maven模块组成,并且依赖关系是直接的,因此为项目创建模块描述符非常简单。 每个Maven模块现在都有自己的模块描述符(),位于文件夹中。测试类没有模块描述符。 但是,我偶然发现了一个我一直没能解决

  • 我对Symfony 4.2应用程序进行了许多边缘到边缘测试。这里我指的是使用测试客户端进行Web请求,然后对结果进行断言的测试。示例: 在此类测试中,是否有方法更改服务容器中的特定服务? 示例问题:我的服务通过名为的抽象来发出web请求。对于我的测试,我希望使用,这样就不会发出真正的web请求。我如何告诉Symfony使用此双重测试? 令人惊讶的是,在主测试留档中没有关于如何执行此基本测试任务的信