java - ArchUnit 测试敏感变量命名

标签 java archunit

设置:

        <java.version>17</java.version>
        <spring-boot.version>2.7.0</spring-boot.version>

        <junit-jupiter-engine.version>5.8.2</junit-jupiter-engine.version>
        <mockito-junit-jupiter.version>4.6.1</mockito-junit-jupiter.version>

        <archunit.version>1.0.0-rc1</archunit.version>

在我最近的 Java 17 项目中,使用了 Arch 单元测试

到目前为止,它运行良好,我想通过将特定变量名称列入黑名单来扩展测试。

目标:问题不是“这是否有意义”,而是“如何做”。


了解我心情的示例:

a) 将名为“uuid”的 Uuid.class列入黑名单

  • 因此,开发者必须使用允许的名称“id”,或者根据其用途考虑更具体的名称。

示例类:

import java.io.Serializable;
import java.util.UUID;

public record myClassRecordClass(
    UUID id,
    UUID uuid,               <-- forbidden
    UUID pupilId,
    UUID teacherId,
    String className
) implements Serializable {}

b) 将业务案例中的“迄今为止使用的术语”列入黑名单,因为它必须重命名。

  • 禁止重新陷入“旧习惯/命名约定”。

十一月2022:据我所知,可以通过 ArchUnit 检查类、字段和成员,但不能检查变量名称

如果以下 PR 可能涵盖该问题... https://github.com/TNG/ArchUnit/issues/768 ...在未来的某个时候。

但是,我是否错过了更好的解决方案? 还有其他方法可以解决这个问题吗?

最美好的祝愿:)

最佳答案

对于records的具体情况,参数名称也是字段名称,因此被捕获

@ArchTest
ArchRule no_field_named_uuid = noFields()
    .that().haveRawType(UUID.class)
    .should().haveName("uuid")
    .because("developers have to use the allowed name 'id' or " +
            "think of a more specific name regarding their purpose");

关于java - ArchUnit 测试敏感变量命名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74461422/

相关文章:

java - 我如何从这个对象打印? java

java - ArchUnit 似乎没有缓存分析的类

java - ArchUnit 类应该仅依赖于包中的特定类

java - 如何禁止使用带有某些注释的类

java - 如何在端口范围内找到开放端口?

java - 使用 java servlet 将数据从一个 html 页面传递到另一页面

java - 带有模式 yyyyMMddhhmmss 的 SimpleDateFormat 无法解析日期 "20160327020727"

c# - 系统编程语言和应用程序编程语言之间的区别

java - 如何防止某些包在 ArchUnit 中使用 spring?