gpt4 book ai didi

hibernate - 单元测试 JPA/hibernate : No Persistence provider for EntityManager

转载 作者:行者123 更新时间:2023-12-04 23:05:26 26 4
gpt4 key购买 nike

我想为我的项目启用单元测试。我创建了如下结构。

目录结构

.
├── pom.xml
├── src
│   ├── main
│   │   ├── java
│   │   └── resources
│   │   ├── META-INF
│   │   │   ├── beans.xml <-- Works fine in live
│   │   │   └── persistence.xml <-- Works fine in live
│   └── test
│   ├── java
│   │   ├── com
│   │   │   └── test
│   │   │   └── model
│   │   │   ├── TestEntityManagerUtil.java
│   │   │   └── TestHibernate.java
│   └── resources
│   ├── META-INF
│   │   ├── beans.xml
│   │   └── persistence.xml

代码

持久性.xml
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="test" transaction-type="RESOURCE_LOCAL">

<description>TEST Persistence Unit</description>
<provider>org.hibernate.ejb.HibernatePersistence</provider>

<properties>

<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
<property name="hibernate.connection.url" value="jdbc:mysql://XXX:3306/X" />
<property name="hibernate.connection.username" value="X" />
<property name="hibernate.connection.password" value="X" />

<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
<property name="hibernate.transaction.flush_before_completion" value="true" />
</properties>
</persistence-unit>
</persistence>

TestEntityManagerUtil.java
public class TestEntityManagerUtil {
public static EntityManagerFactory getEntityManagerFactory(){
return Persistence.createEntityManagerFactory("test");
}
}

TestHibernate.java
public class TestHibernate {

private EntityManager em;

@Before
public void beforeEach(){
// Exception occurs here
em = TestEntityManagerUtil.getEntityManagerFactory().createEntityManager();
}

@After
....

@Test
....
}

异常(exception)
javax.persistence.PersistenceException: No Persistence provider for EntityManager named test
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:69)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47)
at com.wellclub.model.TestEntityManagerUtil.getEntityManagerFactory(TestEntityManagerUtil.java:12)
at com.wellclub.model.TestHibernate.beforeEach(TestHibernate.java:24)

测试persistence.xml 在 target/test-clases 中展开目录原样。

任何人都可以帮助我做错什么。

最佳答案

请在您的 Maven POM 中查看您的 JPA 实现库(Hibernate)依赖项。

<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>${hibernate-core-version}</version>
</dependency>'

否则在非 Maven 项目中添加 hibernate-entityManager.jar

编辑:

请注意,您使用的 JBoss 示例是一个使用 CDI 注入(inject)来获取 EntityManager 的 EE 应用程序。一个主要的误解是假设 JUnit 测试在 EE 应用程序中是可操作的……不,JUnit 测试既不能运行 JBoss 容器也不能部署您的项目。不过你可以引用 http://arquillian.org/invasion/并注意 the JBoss example for an arquillian test

换句话说,您的 JUnit 是测试 EntityManager 的 SE 方式,它在 JBoss 等应用程序服务器中无法运行。

关于hibernate - 单元测试 JPA/hibernate : No Persistence provider for EntityManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13469458/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com