2011-12-13 71 views
2

我正在为Tomcat 6.x开发一个使用Spring(3.1.x),JSF 2,JPA 2(Hibernate Provider)的Web应用程序。 我想测试我的DAO类。测试Spring-JPA

在我的DAO类:我这样做:

@PersistenceContext 
private EntityManager entityManager; 

在Spring配置;

<bean id="entityManagerFactory" 
    class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean"> 
    <property name="persistenceUnitName" value="OpenPU" /> 
</bean> 

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="entityManagerFactory" /> 
</bean> 

persistence.xml中

<persistence-unit name="OpenPU" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <non-jta-data-source>java:comp/env/jdbc/mysql_open</non-jta-data-source> 
    <properties> 
     <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect" /> 
     <property name="hibernate.show_sql" value="true"/> 
     <property name="hibernate.transaction.flush_before_completion" value="true"/> 
     <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/> 
     <property name="hibernate.connection.zeroDateTimeBehavior" value="convertToNull"/> 
    </properties> 
</persistence-unit> 

它第一次我做试验,当我测试我不想使用相同的持久化单元。我听说过有关使用xml数据的dbunit,但我不明白如何在测试期间更改持久性单元。 你能帮我或给我一些例子,教程。

谢谢你。

回答

2

也许这tutorial将帮助。 顺便说一句,有一个有趣的Spring功能可以满足您的需求 - 嵌入式数据库支持。所以,我通常只是用以下结构创建内存H2分贝,与schema.sql文件创建模式,并与测试data.sql一些数据填充它:

<jdbc:embedded-database id="dataSource" type="H2"> 
    <jdbc:script location="classpath:schema.sql"/> 
    <jdbc:script location="classpath:test-data.sql"/> 
</jdbc:embedded-database> 

那么你可以使用这个bean作为数据源EntityManagerFactory bean:

<bean id="entityManagerFactory" 
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" 
    p:dataSource-ref="dataSource" 
    p:persistence-xml-location="classpath:META-INF/persistence.xml">   
    <property name="jpaVendorAdapter"> 
     <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
      <property name="databasePlatform" value="org.hibernate.dialect.MySQLInnoDBDialect"/> 
      <property name="showSql" value="true" /> 
      <!-- other properties --> 
     </bean> 
    </property> 
    <property name="persistenceUnitName" value="OpenPU" /> 
</bean> 

这是非常方便和简洁的方式来创建内存数据库用于测试Spring。 (不要忘记在类路径中添加H2) 有关详细信息,请参阅documentation“章节13.8嵌入式数据库支持”。

+0

如果您没有schema.sql脚本,该怎么办? – KhaledE

+0

@KhaledE只是没有它而使用它'