测试JPA或Hibernate的数据生成器

时间:2011-10-31 09:32:32

标签: hibernate unit-testing jpa-2.0 data-generation stub-data-generation

是否有任何工具或库可用于使用JPA或实体bean生成测试数据?我相信这对于单元测试非常有用,我们可以在内存数据库中创建数据,这些数据是在我们开始测试时动态生成的。因此,不会与实际的DB服务器进行通信,也不会浪费时间。

我只能找到JPAMock。但它仍在开发中。如果有人能提供一个好的指针,那就太好了。

非常感谢。

3 个答案:

答案 0 :(得分:3)

您可以尝试使用Random-JPA,这是一个用于生成随机数据的框架。设置很少。

我开发了它并且在我们的生产测试中使用了一年多。它工作得很好。虽然它目前支持Oracle,MySQL和MSSQL具有完整功能。

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

教程:https://kuros.in/random-jpa

答案 1 :(得分:2)

我将DBUnit与H2数据库结合使用,直到&弹簧。很好地工作:

@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

<强>更新

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

答案 2 :(得分:1)

您可以使用其中一个Quickcheck implementations。 quickcheck方法独立于JPA / Hibernate。您将基于Quickcheck生成域对象实例并将其保留或模拟持久层。