Я написал абстрактный класс util, который используется некоторым процессором аннотаций, и я пытаюсь его протестировать.
Это метод, который я пытаюсь протестировать
public static List<String> getClassNamesFromAnnotation(Element element, Class<?> annotationClass, String attributeName) {
return element.getAnnotationMirrors().stream()
.filter(annotationType -> annotationType.getAnnotationType().toString().equals(annotationClass.getName()))
.findFirst()
.map(foundAnnotation ->
foundAnnotation.getElementValues().entrySet().stream()
.filter(entry -> entry.getKey().toString().equals(String.format("%s()", attributeName)))
.findFirst()
.map(entry ->
((List<Object>) entry.getValue().getValue()).stream()
.map(Object::toString)
.collect(Collectors.toList()))
.orElse(emptyList()))
.orElse(emptyList());
}
Цель этого метода не важна. Мне нужен способ создания временного класса в тестовом классе, который можно получить как javax.lang.model.Element
и использовать в качестве тестового «элемента / класса» для этого метода.
Я пытался протестировать его с помощью этого кода
JavaFileObject fileObject = JavaFileObjects.forSourceString("TestObject","importannotations.SomeAnnotation; @SomeAnnotation public class TestObject {}");
Compilation compilation = javac().compile(fileObject);
assertThat(compilation).succeededWithoutWarnings();
Element element = this.compilationRule.getElements().getTypeElement("TestObject");
assertNotNull(element);
Но элемент возвращает ноль.
Причина, по которой я это делаю, заключается в том, что у аннотации есть поле, которое воздействует на метод по-разному, учитывая разные значения, и я не хочу создавать фактический класс в пакете тестирования для каждого сценария.