标签: archunit

如何使用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();

}
Run Code Online (Sandbox Code Playgroud)

问题是它还分析了测试中的类,这些类不遵循那个简单的依赖约束.

如何将测试限制为"生产"类?

该项目使用Maven构建,因此这些类位于不同的目录中.

将名称以"Tests"结尾的类分开是不够的,因为有许多类不是测试,但只存在于测试类路径中.

architecture testing classpath archunit

9
推荐指数
2
解决办法
1518
查看次数

JavaScript 生态系统中的 ArchUnit 是什么?

ArchUnit 是一个免费、简单且可扩展的库,用于使用任何普通 Java 单元测试框架检查 Java 代码的体系结构。也就是说,ArchUnit 可以检查包和类、层和切片之间的依赖关系,检查循环依赖关系等等。

我们正在编写一个越来越大的 JavaScript 应用程序。我们有一些我们希望能够强制执行的架构规则,主要用例是这样的:这些包不能要求那些。

JavaScript 生态系统中是否有可实现 ArchUnit 为 Java 所做的等效工具?

javascript architecture automated-tests unit-testing archunit

9
推荐指数
0
解决办法
861
查看次数

ArchUnit / Flutter 或 Dart 的测试架构

我正在使用 Clean Architecture 开发 Flutter 应用程序。现在我正在寻找一个图书馆或其他类似 ArchUnit 的东西。测试架构并确保包的正确访问。

您如何解决问题并确保符合架构。我很感激想法或替代方案。

dart flutter clean-architecture archunit flutter-test

6
推荐指数
1
解决办法
338
查看次数

在ArchUnit中搜索未使用的类,如何找到MyClass.class引用?

我正在尝试使用ArchUnit进行单元测试,以检查是否有任何未使用的类。但我不知道如何检查 MyClass.class 是否引用了某个类。

例如我有一堂课:

public class MyClass {
    ...
}
Run Code Online (Sandbox Code Playgroud)

然后我用某种方法引用这个类:

public class MySecondClass{
    public void methodA(){
        methodThatTakesClassAsParameter(MyClass.class);
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

如何从 ArchUnit 中看到 MyClass 是从 MySecondClass 引用的?

java archunit

5
推荐指数
1
解决办法
1058
查看次数

如何在 ArchUnit 规则中排除一个类?

在 ArchUnit 中为分层架构创建规则时,我不清楚如何排除单个类 (Main)。 基本示例排除了源和目标。

...但我不明白它是如何转换成我的需要的。我只想忽略 Main 。为什么?因为 Main 引用了所有层,因为它将所有依赖项注入到位。

原始代码 与失败的测试一起在我的 GitHub 中。(该项目是一个虚拟项目,因此运行起来很简单;只需克隆它,运行测试并看到一个失败)。

java unit-testing archunit

5
推荐指数
1
解决办法
2308
查看次数

ArchUnit - 确保方法参数被注释

我正在尝试编写一个 ArchUnit 测试规则,该规则应确保使用@ComponentInterface注释注释的接口具有使用注释注释的方法参数@Input。像这样:

ArchRule rule =
        methods()
            .that()
            .areDeclaredInClassesThat()
            .areInterfaces()
            .and()
            .areDeclaredInClassesThat()
            .areAnnotatedWith(ComponentInterface.class)
            .should()
            .haveRawParameterTypes(
                allElements(CanBeAnnotated.Predicates.annotatedWith(Input.class)));
Run Code Online (Sandbox Code Playgroud)

界面如下所示:

@ComponentInterface
public interface AdminComponent {
  void login(@Input(name = "loginString") String loginString);
}
Run Code Online (Sandbox Code Playgroud)

但测试失败并出现如下错误: Method < com.some.package.AdminComponent.login(java.lang.String)> does not have raw parameter types all elements annotated with @Input in (AdminComponent.java:0)

在这种情况下,规则应该如何才能正常工作?

PS 经过一些调试后,发现hasRawParameterTypes检查参数类型(类)是否被注释,而不是方法参数本身。因此它查看String类并发现它没有用@Input注释。很高兴知道,但这并不能解决问题。

java annotations archunit

5
推荐指数
1
解决办法
2746
查看次数

有没有像 Django 的拱形单元这样的库?

我一直在寻找一个库或工具来测试我的 Django 项目架构,检查依赖项、层等,比如 Arch Unit for Java。但直到现在,我什么也没找到。我什至不知道在 Python/Django 项目中进行这些类型的测试是否可行。我知道 Django 本身已经检查了循环依赖。

python architecture testing django archunit

5
推荐指数
1
解决办法
200
查看次数

Archunit 检查方法调用

我有一个类,它具有三个不应从某些类调用的方法。

我如何使用 Archunit 检查这一点?

例如

public class Foo {

   public void method1() {
   }

   public void method2() {
   }

   public void method3() {
   }
}
Run Code Online (Sandbox Code Playgroud)

method1 和 method2 只能由类 Bar1 和 Bar2 调用。

archunit

4
推荐指数
2
解决办法
3521
查看次数

如何从 Archunit 测试中排除某个包?

在我的根项目中,我有两个具有该包结构的子项目。

Project 1: com.app
Project 2: com.app.api
Run Code Online (Sandbox Code Playgroud)

在项目 1 中,我有一个用 ArchRules 定义的类,注释如下

@AnalyzeClasses( packages = "com.app")
public class ArchTests
Run Code Online (Sandbox Code Playgroud)

问题是,如果我运行该测试,它也会分析项目 2 中的所有内容。如何排除 com.app.api 包?

archunit

3
推荐指数
1
解决办法
1856
查看次数

ArchUnit 包的使用(子包除外)

我得到了看似微不足道的用例,但我仍然无法弄清楚。让我们看一下包结构。

-- 通用包
-- 套餐1
---- DAO
-  -  常见的
-  -  服务
-- 套餐2
---- 子包1
---- 子包2

我想要实现的是创建一条规则,其中Package2中的所有类都不能使用Package1 中的任何类,除了公共类之外。到目前为止,我已经得到了这样的东西:

noClasses()
    .that()
    .resideInAPackage("package2..")            
    .should()
    .resideInAnyPackage("package1..")
    // and how write eg. except("package1.common")
    .check(classes);
Run Code Online (Sandbox Code Playgroud)

但我不知道如何从这个方程中排除package1.common。有人可以帮忙吗?

java archunit

2
推荐指数
1
解决办法
1396
查看次数

ArchUnit 规则否定包访问?

我偶然发现了以下片段。

ArchRule myRule = classes()
    .that().resideInAPackage("..core..")
    .should().onlyBeAccessed().byAnyPackage("..controller..");
Run Code Online (Sandbox Code Playgroud)

我想知道如何否定这个条件,所以测试应该检查core包是否未被controller包访问?

java architecture archunit

2
推荐指数
1
解决办法
1287
查看次数

Arch 测试失败 STANDARD_STREAMS

我有遵循 archunit 规则的应用程序,我得到:

NO_CLASSES_SHOULD_ACCESS_STANDARD_STREAMS

失败的规则 - 这意味着我无法使用标准 Java I/O 流。但我可以用什么来代替呢?

如何使用其他 Java 方法而不是标准流来避免这种架构规则?因为我的拱门规则失败了

java stream archunit

1
推荐指数
1
解决办法
605
查看次数