是否有任何工具或库可用于使用 JPA 或实体 bean 生成测试数据?我相信这对于单元测试非常有帮助,我们可以在内存数据库中创建一个在我们开始测试时动态生成的数据。因此,不会与实际的数据库服务器通信,也不会浪费时间。
我只能找到JPAMock。但它仍在开发中。如果有人能提供一个好的指针,那就太好了。
非常感谢。
是否有任何工具或库可用于使用 JPA 或实体 bean 生成测试数据?我相信这对于单元测试非常有帮助,我们可以在内存数据库中创建一个在我们开始测试时动态生成的数据。因此,不会与实际的数据库服务器通信,也不会浪费时间。
我只能找到JPAMock。但它仍在开发中。如果有人能提供一个好的指针,那就太好了。
非常感谢。
您可以尝试 Random-JPA,这是一个旨在生成随机数据的框架。设置是最小的。
我开发了它,并在我们的生产测试中使用了一年多。它工作得很好。虽然它目前支持具有完整功能的 Oracle、MySQL 和 MSSQL。
您可以使用其中一种Quickcheck 实现。快速检查方法独立于 JPA/Hibernate。您将基于 Quickcheck 生成域对象实例并将它们持久化或模拟持久层。
我将DBUnit与 H2 数据库和 untils & 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
更新
<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>