【问题标题】:Test data generator for JPA or HibernateJPA 或 Hibernate 的测试数据生成器
【发布时间】:2011-12-18 14:35:55
【问题描述】:

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

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

非常感谢。

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

    【解决方案2】:

    您可以使用Quickcheck implementations 之一。快速检查方法独立于 JPA/Hibernate。您将基于 Quickcheck 生成域对象实例并将它们持久化或模拟持久层。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-30
        • 2011-09-20
        • 2015-11-27
        • 2013-03-18
        • 1970-01-01
        相关资源
        最近更新 更多