2017-06-20 170 views
3

我写我的第一ArchUnit测试:如何忽略测试类类与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”结尾的名称或类似的名称是不够的,因为有许多类不是测试,而是只存在于测试类路径中。

回答

2

看起来,API在这方面并没有得到很好的指导,因为您不是第一个想知道这个问题的人(这也是Github上的#1问题https://github.com/TNG/ArchUnit/issues/1)。

为了虽然回答这个问题,注释@AnalyseClasses有一个额外的属性importOption(在ArchUnit 0.5.0这将是一个数组取与所有选项),它的ImportOption,任意实现在那里你可以指定哪些Location(基本上包含的URI)。

由于排除测试是相当普遍,这ImportOption已经预先定义(对于Maven和摇篮< 4.0),所以你可以写

@AnalyzeClasses(..., importOption = ImportOption.DontIncludeTests.class) 
public class MyTest{ ... } 

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