gpt4 book ai didi

testing - 如何使用 ArchUnit 忽略测试类中的类

转载 作者:行者123 更新时间:2023-11-28 19:43:09 44 4
gpt4 key购买 nike

我写了我的第一个 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 构建的,因此这些类位于单独的目录中。

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

最佳答案

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

虽然要回答这个问题,注解 @AnalyseClasses 有一个额外的属性 importOptions,它采用 ImportOption 的任意实现。您可以在那里指定要包含的 Location(基本上是 URI)。

由于排除测试很常见,这个ImportOption 已经预定义(对于 Maven 和 Gradle < 4.0),所以你可以写

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

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

关于testing - 如何使用 ArchUnit 忽略测试类中的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44654374/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com