2

是否有任何工具或庫可用於使用JPA或實體bean生成測試數據?我相信這對於單元測試非常有幫助,我們可以在內存數據庫中使用動態生成的數據,並在我們開始測試時進行動態生成。因此,將不會與實際的數據庫服務器進行通信,也不會浪費時間。我只能找到JPAMock。但它仍在發展中。如果有人能提供一個好的指針,那將會很好。用於JPA或休眠的測試數據生成器

非常感謝。

回答

2

我使用DBUnit與H2數據庫結合使用,直到& Spring。工作得很好:

@SpringApplicationContext({ "classpath:test-context-dbunit.xml" }) 
@Transactional(TransactionMode.ROLLBACK) 
@DataSet 
public class ApplicationDaoTest extends UnitilsTestNG { 

    @SpringBeanByType 
    private ApplicationDao applicationDao; 

    @Test 
    public void findAll() throws Exception { 
     List<Application> actual = applicationDao.findAll(); 
     assertNotNull(actual); 
     assertEquals(actual.size(), 3); 
    } 
} 

的數據設置在一個XML文件:

<?xml version="1.0" encoding="UTF-8"?> 

<dataset> 
    <APPLICATION APPLICATION_ID="1" name="APP3" enabled="1" application_type="TRADE" api_key="AK1" auto_create_topics="1" /> 
    <APPLICATION APPLICATION_ID="2" name="APP1" enabled="1" application_type="TRADE" api_key="AK2" auto_create_topics="1" /> 
    <APPLICATION APPLICATION_ID="3" name="APP2" enabled="0" application_type="TRADE" api_key="AK3" auto_create_topics="1" /> 
</dataset> 

在Spring的測試環境下,你定義數據源這樣:

<bean id="dataSource" class="org.unitils.database.UnitilsDataSourceFactoryBean"/> 

隨着方言使用:org.hibernate.dialect.H2Dialect

最後在類路徑中顯示unitils.properties,如:

database.driverClassName=org.h2.Driver 
database.url=jdbc:h2:mem:test 
database.user=sa 
database.password= 
database.schemaNames=public 
database.dialect=hsqldb 

UPDATE

<bean id="sessionFactory" 
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource"/> 
    <property name="packagesToScan" value="..."/> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">org.hibernate.dialect.H2Dialect</prop> 
      <prop key="hibernate.show_sql">true</prop> 
      <prop key="hibernate.hbm2ddl.auto">create-drop</prop> 
     </props> 
    </property> 
</bean> 
1

您可以使用Quickcheck implementations之一。 quickcheck方法獨立於JPA/Hibernate。您可以基於Quickcheck生成域對象實例,並保留它們或模擬持久層。

2

您可以試用Random-JPA,這是一個設計用於生成隨機數據的框架。該設置是最小的。

我開發了它,並在我們的生產測試中使用了一年多。它工作得很好。雖然它目前支持Oracle,MySQL & MSSQL具有完整功能。

https://github.com/kuros/random-jpa