我们正在使用gradle并拥有默认的项目结构:
/src
/main
/java
/resources
/META-INF
persistence.xml
/test
/java
/resources
/META-INF
persistence.xml
虽然我们使用gradle运行junit测试,但一切都很好(我们没有任何关于源路径等的特殊gradle配置):来自' test'的persistence.xml。使用。
但是如果我们尝试使用eclipse运行我们的junit测试,那么总是来自' main'的peristence.xml。使用。
我们如何配置eclipse以使用来自' main'的persistence.xml?对于一个启动配置,但来自' test'的persistence.xml所有junit测试?
答案 0 :(得分:1)
如果这是关于从类路径加载的资源的一般问题,那么尝试另一件事:
在Eclipse的项目属性Java Build Path-> Order and Export中,将测试文件夹放在src文件夹上。
然后在“部署程序集”下,排除测试文件夹
这将确保当您直接从Eclipse中启动测试时,您将首先在测试文件夹中搜索类路径资源。但是,当您作为Web应用程序启动时,测试文件夹将从WEB-INF/classes
中排除。
答案 1 :(得分:0)
我用一个persistence.xml和不同的持久性单元解决了这个问题。
<persistence-unit name="MAIN">
...
</persistence-unit>
<persistence-unit app="TEST">
...
</persistence-unit>
然后在您的应用中,您将使用
注入主持久性单元@PersistenceContext(name="MAIN", unitName="MAIN")
private EntityManager entityManager;
对于单元测试,您将使用TEST
持久性单元显式创建一个EntityManager,并将其手动注入被测对象:
EntityManager em = Persistence.createEntityManagerFactory("TEST").createEntityManager();
bean.setEntityManager(em);