【问题标题】:Testing Spring-JPA测试 Spring-JPA
【发布时间】:2011-12-13 14:58:23
【问题描述】:

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

在我的 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,但我不明白如何在测试期间更改持久性单元。 你能帮我或给我一些例子,教程。

谢谢。

【问题讨论】:

    标签: jpa-2.0 dbunit spring-test


    【解决方案1】:

    也许这个tutorial 会有所帮助。 顺便说一句,有一个有趣的 Spring 特性可以满足您的需求 - 嵌入式数据库支持。所以,我通常只使用以下构造来创建内存中的 H2 db,使用 schema.sql 创建模式并用 test-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 嵌入式数据库支持”。

    【讨论】:

    • 如果没有 schema.sql 脚本怎么办?
    • @KhaledE 不用它就用它&lt;jdbc:embedded-database id="dataSource" type="H2" /&gt;
    猜你喜欢
    • 2018-06-26
    • 1970-01-01
    • 1970-01-01
    • 2012-04-16
    • 2018-06-26
    • 2018-05-10
    • 2014-08-13
    • 2021-12-04
    • 1970-01-01
    相关资源
    最近更新 更多