Java ArchUnit: обнаружение аннотации в методах getMethodCallsFromSelf
Я аннотировал некоторые методы с помощью пользовательской аннотации: "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 ответ
Хорошо, мое сохранение аннотации было установлено на ИСТОЧНИК вместо КЛАССА.
Исправлена.