JPA或Hibernate的测试数据生成器

5
有没有工具或库可以使用JPA或实体bean生成测试数据?我相信这对单元测试非常有帮助,我们可以在内存中拥有动态生成的数据,并且不需要与实际的数据库服务器进行通信,也不会浪费时间。
我只能找到JPAMock。但它仍在开发中。如果有人能提供一个好的指针就好了。
非常感谢。
3个回答

3
你可以尝试使用Random-JPA,这是一个旨在生成随机数据的框架。它的设置非常简单。
我开发了它,并在我们的生产测试中已经使用了一年多。它完美地工作着。虽然目前仅支持Oracle、MySQL和MSSQL,但具有完整功能。
代码:https://github.com/kuros/random-jpa 教程:https://kuros.in/random-jpa

1
似乎后来添加了对Postgres的支持:https://github.com/kuros/random-jpa#supported-database - Garry Polley

2
您可以使用其中一种Quickcheck 实现。这种方法与 JPA/Hibernate 无关。您可以基于 Quickcheck 生成域对象实例并持久化它们,或者模拟持久化层。

1

我在使用 H2 数据库和 untils & Spring 时,结合 DBUnit 使用。效果很好:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接