2011-12-13 4 views
2

Я разрабатываю веб-приложение с использованием Spring (3.1.x), JSF 2, JPA 2 (поставщик гибернации) для tomcat 6.x. Я хочу проверить свои классы 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> 

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

Спасибо.

ответ

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> 

Тогда вы могли бы использовать этот компонент в качестве источника данных для вас EntityManagerFactory боба:

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

Это очень удобно и лаконичный способ для создания в памяти базы данных для испытаний с весны. (не забудьте добавить H2 в свой путь к классу) См. documentation для получения дополнительной информации, глава «13.8 Встроенная поддержка базы данных».

+0

Что делать, если у вас нет сценария schema.sql? – KhaledE

+0

@KhaledE просто используйте его без него '' –

Смежные вопросы