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

如何用ArchUnit忽略测试类中的类

米项禹
2023-03-14

我编写了我的第一个ArchUnit测试:

import static com.tngtech.archunit.library.dependencies.SlicesRuleDefinition.*;
// more non-static imports

@RunWith(ArchUnitRunner.class)
@AnalyzeClasses(packages = "my.domain.project")
public class PackageStructureTests {

    @ArchTest public static final ArchRule NO_CYCLES = slices().matching("my.domain.project.(**)")
            .namingSlices("package:$1").should().beFreeOfCycles();

}

这个项目是用Maven构建的,所以类在不同的目录中。

将名称以“tests”或其他东西结尾的类分开是不够的,因为有许多类不是测试,而是只存在于测试类路径中。

共有1个答案

屠盛
2023-03-14

API似乎没有很好地指导这一点,因为您不是第一个对此感到疑惑的人(这也是Github https://Github.com/tng/archunit/issues/1上的问题1)。

不过,为了回答这个问题,注释@analyzeclasses有一个额外的属性importoptiosn(因为ArchUnit 0.5.0是一个数组,用于所有选项),它接受importoptiosn的任意实现,在这里您可以指定要包含的位置(基本上是URI)。

由于排除测试非常常见,所以这个importoption已经预定义(对于Maven和Gradle),所以您可以编写

@AnalyzeClasses(..., importOptions = { ImportOption.DoNotIncludeTests.class })
public class MyTest { … }

我不认为所有设置都有通用的解决方案(因此可以自由地编写自己的importoption来决定包含哪些位置)。但是,对于标准的Maven和Gradle设置,它应该可以工作。

 类似资料:
  • 我正在测试Quarkus应用程序,我想忽略一些测试。 测试类用,以及带有 我试图使用注释,但它不起作用,被忽略的测试无论如何都会执行。 这是代码: 有人知道我怎么才能做到这一点吗?

  • 在下面的测试类中,我不希望@EnableWebSecurity注释类被Spring上下文捕获: 我正在运行Spring BootV2.2.2版本。 下面是安全配置类:

  • 在ArchUnit-Test中,是否有可能从分层测试条件中排除特定的类? 希望我能说清楚...

  • 问题内容: 我正在尝试为api 编写Web服务。因此,我编写了一个MyLogRecord类,该类继承自LogRecord。我用JAX- B注释对此类进行了注释,包括,因此它将忽略未注释的字段和属性。当我启动tomcat时,出现错误,并且其他类没有默认的构造函数,但是没有带注释的方法对Level类或任何其他类进行任何引用。这些由父类引用。 我的子类具有需要定义的所有内容。如何使JAX-B完全忽略父类

  • 有时,我们编写的代码并没有准备就绪,并且测试用例要测试该方法/代码是否失败(或成功)。 在本示例中,注释有助于禁用此测试用例。 如果使用注释在测试方法上,则会绕过这个未准备好测试的测试用例。 在本教程中,我们将演示如何使用来忽略测试方法。 创建一个Maven项目,其结构如下所示 - pom.xml 依懒包配置 - 创建一个测试类:TestIgnore.java,其代码如下所示 - 运行上面代码,得

  • 在我的根项目中,我有两个子项目具有这种包结构。 在项目1中,我有一个用大规定义的类,就像这样 问题是,如果我运行该测试,它也会分析项目2中的所有内容。我如何排除包com.app.api?