首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ArchUnit测试importOptions DoNotIncludeTests不工作

ArchUnit测试importOptions DoNotIncludeTests不工作
EN

Stack Overflow用户
提问于 2021-05-06 23:17:00
回答 1查看 254关注 0票数 0

我使用的是Spring2.3.8应用程序中的ArchUnit 0.18和archunit-juit5。由于一些我找不到的原因,ImportOption.DoNotIncludeTests.class没有像预期的那样工作,测试类也包括在内。我只能通过注释这些测试类中的代码来使ArchUnit测试正常工作。

ArchUnit测试为:

代码语言:javascript
复制
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);
    }
}

为了不进入帐户测试类,我是否遗漏了某些步骤?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2021-05-27 13:53:06

在这种情况下,不计算注释@AnalyzeClasses(packages = "com.petproject", importOptions = { ImportOption.DoNotIncludeTests.class })。首先,使用JUnit的@Test而不是ArchUnit的@ArchTest注释测试方法。第二,根据以下结果检查规则

代码语言:javascript
复制
JavaClasses classes = new ClassFileImporter().importPackages("com.petproject");

正如您已经了解到的,您可以将其替换为

代码语言:javascript
复制
JavaClasses classes = new ClassFileImporter().withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_TESTS).importPackages("com.petproject");

或者,您可以将测试设置更改为

代码语言:javascript
复制
@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 = ...
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67421102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档