BeanManager не возвращает bean-компоненты во время модульного тестирования в описанном выше сценарии использования. Проект представляет собой библиотеку Java.
Интерфейс компонента
public interface My {
String turn();
}
Спецификатор компонента
@Qualifier
@Target({ ElementType.TYPE, ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
public @interface My1 {
}
Класс компонента
@ApplicationScoped
@My1
public class MyClass1 implements My {
@Override
public String turn() {
return "1";
}
}
Следующее модульный тест завершился неудачно с пустым списком компонентов.
@QuarkusTest
public class MyTest {
@Test
public void test1() throws IllegalAccessException, InstantiationException {
Set<Bean<?>> beans = beanManager.getBeans(My.class, new AnnotationLiteral<My1>() {});
MatcherAssert.assertThat(beans.isEmpty(), Is.is(false));
}
@Test
public void test2() throws IllegalAccessException, InstantiationException {
// Class<? extends Annotation>
final Class<? extends Annotation> annotationClass = My1.class;
final Annotation qualifier = new Annotation() {
@Override
public Class<? extends Annotation> annotationType() {
return annotationClass;
}
};
Set<Bean<?>> beans = beanManager.getBeans(My.class, qualifier);
MatcherAssert.assertThat(beans.isEmpty(), Is.is(false));
}
Вывод JUnit для test1 и test2
java.lang.AssertionError:
Expected: is <false>
but: was <true>
Expected :is <false>
Actual :<true>
Запуск того же примера в другом Java библиотечном проекте работает нормально.
Добавление вставленного атрибута My в класс модульного тестирования тоже работает нормально.
Что может быть не так? Что не так с BeanManager в этом примере?
Thx