Java ArchUnit: обнаружение аннотации в методах getMethodCallsFromSelf - PullRequest
0 голосов
/ 02 марта 2019

Я аннотировал некоторые методы с помощью пользовательской аннотации: "ExistForTesting"

@Documented
@Target({TYPE, FIELD, METHOD})
@Retention(SOURCE)
public @interface ExistForTesting {
    String why() default "";
}

Я хотел бы написать модульный тест (Junit5 + ArchUnit), который гарантирует, что аннотированные методы ExistForTesting используются только из модульных тестов.Итак, я написал данный тест:

ArchCondition<JavaClass> NOT_CALL_TEST_METHODS =
    new ArchCondition<JavaClass>("not call methods annotated with ExistForTesting") {
        @Override
        public void check(@NotNull JavaClass item, ConditionEvents events) {
            item.getMethodCallsFromSelf().stream().filter(method -> method.getTarget().isAnnotatedWith(ExistForTesting.class))
                .forEach(method -> {
                    String message = String.format(
                        "Method %s is annotated with ExistForTesting",
                        method.getTarget().getFullName());
                    events.add(SimpleConditionEvent.violated(method, message));
                });
        }
    };

@Test
public void shouldNotUseTestMethods() {
    classes().that()
        .haveSimpleNameNotEndingWith("Test")
        .should(NOT_CALL_TEST_METHODS)
        .check(appClasses);
}

Проблема: моя аннотация не обнаружена.
Отладчик находит вызовы методов, но method.getTarget().isAnnotatedWith(ExistForTesting.class)) всегда возвращает false.

Что я делаю не так?

1 Ответ

0 голосов
/ 02 марта 2019

Хорошо, для хранения аннотации было установлено ИСТОЧНИК вместо КЛАССА.
Исправлено.

...