我使用的是Spring2.3.8应用程序中的ArchUnit 0.18和archunit-juit5。由于一些我找不到的原因,ImportOption.DoNotIncludeTests.class没有像预期的那样工作,测试类也包括在内。我只能通过注释这些测试类中的代码来使ArchUnit测试正常工作。
ArchUnit测试为:
import com.tngtech.archunit.core.domain.JavaClasses;
import com.tngtech.archunit.core.importer.ClassFileImporter;
import com.tngtech.archunit.core.importer.ImportOption;
import com.tngtech.archunit.junit.AnalyzeClasses;
import org.junit.jupiter.api.Test;
@AnalyzeClasses(packages = "com.petproject", importOptions = { ImportOption.DoNotIncludeTests.class })
class ArchitectureTest {
@Test
public void some_architecture_rule() {
JavaClasses classes = new ClassFileImporter().importPackages("com.petproject");
layeredArchitecture()
.layer("Controller").definedBy("com.petproject.controller")
.layer("Validators").definedBy("com.petproject.validations.validators")
.layer("Service").definedBy("com.petproject.service")
.layer("Persistence").definedBy("com.petproject.repository")
.whereLayer("Controller").mayNotBeAccessedByAnyLayer()
.whereLayer("Service").mayOnlyBeAccessedByLayers("Controller", "Validators")
.check(classes);
}
}为了不进入帐户测试类,我是否遗漏了某些步骤?
谢谢!
发布于 2021-05-27 13:53:06
在这种情况下,不计算注释@AnalyzeClasses(packages = "com.petproject", importOptions = { ImportOption.DoNotIncludeTests.class })。首先,使用JUnit的@Test而不是ArchUnit的@ArchTest注释测试方法。第二,根据以下结果检查规则
JavaClasses classes = new ClassFileImporter().importPackages("com.petproject");正如您已经了解到的,您可以将其替换为
JavaClasses classes = new ClassFileImporter().withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_TESTS).importPackages("com.petproject");或者,您可以将测试设置更改为
@AnalyzeClasses(packages = "com.petproject", importOptions = { ImportOption.DoNotIncludeTests.class })
class ArchitectureTest {
@ArchTest
public static void some_architecture_rule(JavaClasses classes) {
yourCreatedRule.check(classes);
}
// or as a field instead of a method
@ArchTest
public static ArchRule some_architecture_rule = ...
}https://stackoverflow.com/questions/67421102
复制相似问题