Tal*_*han 4 hibernate java-ee-6 jpa-2.0
我想为我的项目启用单元测试.我创建了如下结构.
目录结构
.
??? 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
Run Code Online (Sandbox Code Playgroud)
码
persistence.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>
Run Code Online (Sandbox Code Playgroud)
TestEntityManagerUtil.java
public class TestEntityManagerUtil {
public static EntityManagerFactory getEntityManagerFactory(){
return Persistence.createEntityManagerFactory("test");
}
}
Run Code Online (Sandbox Code Playgroud)
TestHibernate.java
public class TestHibernate {
private EntityManager em;
@Before
public void beforeEach(){
// Exception occurs here
em = TestEntityManagerUtil.getEntityManagerFactory().createEntityManager();
}
@After
....
@Test
....
}
Run Code Online (Sandbox Code Playgroud)
例外
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)
Run Code Online (Sandbox Code Playgroud)
测试persistence.xml在target/test-clases目录中按原样展开.
任何人都可以帮助我,我会做错.
请查看Maven POM中的JPA实现库(Hibernate)依赖项.
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>${hibernate-core-version}</version>
</dependency>'
Run Code Online (Sandbox Code Playgroud)
否则在非Maven项目中添加hibernate-entityManager.jar
请注意,您使用的JBoss示例是一个EE应用程序,它使用CDI注入来获取EntityManager.一个主要的误解是假设JUnit测试在EE应用程序中是可操作的......不,JUnit测试既不能运行JBoss容器也不能部署你的项目.你可以参考http://arquillian.org/invasion/并注意JBoss的arquillian测试示例
换句话说,您的JUnit是测试EntityManager的SE方式,它在JBoss等应用服务器中无法运行.
| 归档时间: |
|
| 查看次数: |
12916 次 |
| 最近记录: |