在ArchUnit测试中,当我们使用importOptions来指定应该包含哪些包和类时,有时可能出现DoNotIncludeTests选项无法清除测试类的情况。在这种情况下,我们可以尝试使用ExcludeTests选项来显式地排除测试类。
代码示例:
@Test void testArchitecture() { JavaClasses classes = new ClassFileImporter() .importPackages("com.example.myapp");
ArchRule rule = layeredArchitecture()
.layer("Service").definedBy("com.example.myapp.service..")
.layer("Repository").definedBy("com.example.myapp.repository..")
.layer("Web").definedBy("com.example.myapp.web..")
// Exclude tests explicitly
.whereLayer("Service").mayNotBeAccessedByAnyLayer(ExcludeTests.class)
.whereLayer("Repository").mayNotBeAccessedByAnyLayer(ExcludeTests.class)
.whereLayer("Web").mayNotBeAccessedByAnyLayer(ExcludeTests.class);
rule.check(classes);
}
在上面的示例代码中,我们在每个层次上使用了mayNotBeAccessedByAnyLayer方法来排除测试类,并将ExcludeTests作为参数传递给该方法。
这样,即使我们的importOptions包含DoNotIncludeTests选项,也可以确保测试类被排除在ArchUnit测试之外。