1

嗨,我想为服务类编写一个 ArchUnit 测试,这样字段不允许是日期,到目前为止,我可以通过执行以下操作来完成接近我需要的事情:

@Test
    public void all_public_methods_in_the_controller_layer_should_return_API_response_wrappers2() {
        JavaClasses importedClasses = new ClassFileImporter().importPackages("com.some.package");
        methods().that().areDeclaredInClassesThat().areAnnotatedWith(XmlAccessorType.class).and().areDeclaredInClassesThat().resideInAPackage("..webservice..").and().arePublic().and().haveNameMatching("Date").should().haveRawReturnType(SomeOtherDate.class).because("bla bla bla").check(importedClasses);
    }

但是,即使类包含 Date 字段,为 Fields 编写类似的测试也会通过。

例子 :

  @Test
    public void some_architecture_rule22() {
        JavaClasses importedClasses = new ClassFileImporter().importPackages("com.some.package");
        fields().that().areDeclaredIn(SomeClass.java).and().arePrivate().and().haveRawType(Date.class).should().haveRawType(SomeOtherDate.class).because("bla bla bla").check(importedClasses);

    }
4

1 回答 1

4

了解具体细节后,我认为您的问题可以简化为如何防止某些类具有 java.util.Date 类型的字段。

在一个小型测试项目中,我准备了以下 ArchRule,它似乎有效:

ArchRuleDefinition.noFields().should().haveRawType(Date.class)
于 2019-10-26T19:24:05.753 回答