Никакие классы обслуживания не должны использовать Java.util.date - PullRequest
1 голос
/ 25 октября 2019

Привет, я хочу написать тест 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);
    }

Нонаписание аналогичных тестов для полей просто проходит, хотя классы содержат поля даты.

пример:

  @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);

    }

1 Ответ

3 голосов
/ 26 октября 2019

Зная конкретные детали, я думаю, что ваш вопрос можно было бы упростить до того, как запретить некоторым классам иметь поля типа java.util.Date.

В небольшом тестовом проекте я подготовил следующий ArchRule, и онказалось работает:

ArchRuleDefinition.noFields().should().haveRawType(Date.class)
...