对于JPA或Hibernate的测试数据生成

问题描述 投票:4回答:3

是否有使用JPA或实体bean可以用来生成测试数据的任何工具或库?我相信这将是单元测试非常有帮助,我们可以只当我们开始我们的测试中内存数据库具有数据动态生成的。所以,会出现与实际DB服务器没有沟通,没有任何时间浪费。

我只能够找到JPAMock。但它仍然是正在开发中。这将是很好,如果有人可以提供一个良好的指针。

非常感谢。

hibernate unit-testing jpa-2.0 data-generation stub-data-generation
3个回答
1
投票

我用DBUnit与H2的数据库和untils和春天一起。很好地工作:

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

3
投票

你可以尝试随机JPA,旨在生成随机数据的框架。该设置是最小的。

我公司开发,并一直在使用它超过了一年以来对我们的生产测试。这工作完全正常。虽然它目前支持Oracle,MySQL的&MSSQL与全功能。

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

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


2
投票

您可以使用Quickcheck implementations之一。在快速检查的方法是独立于JPA /休眠。您将基于快速检查领域对象实例,并坚持他们或嘲笑的持久层。

© www.soinside.com 2019 - 2024. All rights reserved.