Тестирование Spring-JPA - PullRequest
       21

Тестирование Spring-JPA

2 голосов
/ 13 декабря 2011

Я разрабатываю веб-приложение, используя Spring (3.1.x), JSF 2, JPA 2 (Hibernate Provider) для tomcat 6.x.Я хочу проверить свои классы DAO.

В моем классе DAO: я делаю это:

@PersistenceContext
private EntityManager entityManager;

В весенней конфигурации;

<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>

Это первый раз, когда я делаю тест, и когда я тестирую, я не хочу использовать один и тот же блок персистентности.Я слышал о dbunit для использования XML-данных, но я не понимаю, как изменить единицу сохранения во время теста.Можете ли вы помочь мне или привести пример, учебник.

Спасибо.

1 Ответ

2 голосов
/ 29 декабря 2011

Может быть, это учебник поможет.Кстати, есть одна интересная функция 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 в ваш путь к классам) Подробнее см. документация , глава "13.8 Поддержка встроенных баз данных".

...