Получить альтернативный entityManager при модульном тестировании через CDI - PullRequest
0 голосов
/ 30 января 2020

Я использую ванну Junit 5, Java, которая работает в среде webapp EE8.

В веб-приложении у меня фактически есть класс ресурсов, который используется в качестве производителя:

@ApplicationScoped
public class Resources {

    @Produces
    public Logger produceLog(InjectionPoint injectionPoint) {
        return LoggerFactory.getLogger(injectionPoint.getMember().getDeclaringClass().getName());
    }

    @Produces
    @PersistenceContext(unitName = "primary")
    private EntityManager entityManager;

}

Теперь я хочу написать тест SE, и мне нужно получить альтернативный менеджер сущностей, например:

public class MockResources {

    @Alternative
    @JobScoped
    @Produces
    public EntityManager getEntityManager() {
        return Persistence.createEntityManagerFactory("primary").createEntityManager();
    }

}

Проблема в том, что я не знаю, как получить эту альтернативу сущности, так как bean. xml хотят класс (я пробовал с Hibernate SessionImpl, но он не работает), ни @Stereotype не выглядит хорошо для моего случая.

<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
       bean-discovery-mode="all">
    <alternatives>
        <class>org.hibernate.internal.SessionImpl</class>
    </alternatives>
</beans>

Any помощь?

1 Ответ

0 голосов
/ 02 апреля 2020

Вы должны создать весь компонент производителя @Alternative Resources, как в

@Alternative
@ApplicationScoped
public class TestResources {
    @Produces
    public Logger produceLog(InjectionPoint injectionPoint) {
        return LoggerFactory.getLogger(injectionPoint.getMember().getDeclaringClass().getName());
    }

    @Produces
    private EntityManager getEntityManager() {
        // create your new entitymanager here
        return Persistence.createEntityManagerFactory("testunitname").createEntityManager();
    }
}

Затем определите свой тестовый альтернативный класс для тестовых компонентов. xml, как описано в вашем вопросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...