Генератор тестовых данных для JPA или Hibernate - PullRequest
4 голосов
/ 31 октября 2011

Существуют ли какие-либо инструменты или библиотеки, которые можно использовать для генерации тестовых данных с использованием JPA или объектных компонентов?Я считаю, что это будет очень полезно для модульного тестирования, где у нас может быть база данных в памяти с данными, которые генерируются динамически, как только мы начинаем наше тестирование.Таким образом, не будет связи с реальными серверами БД и не будет пустой траты времени.

Мне удалось найти только JPAMock .Но это все еще в стадии разработки.Было бы неплохо, если бы кто-то смог предоставить хороший указатель.

Большое спасибо.

Ответы [ 3 ]

3 голосов
/ 27 мая 2016

Вы можете попробовать Random-JPA, фреймворк, предназначенный для генерации случайных данных. Установка минимальна.

Я разработал его и уже более года использую для наших производственных испытаний. Работает отлично. Хотя в настоящее время он поддерживает Oracle, MySQL и MSSQL с полной функциональностью.

Код: https://github.com/kuros/random-jpa

Учебник: https://kuros.in/random-jpa

1 голос
/ 08 ноября 2011

Вы можете использовать одну из реализаций Quickcheck . Подход быстрой проверки не зависит от JPA / Hibernate. Вы бы сгенерировали экземпляры объекта домена на основе Quickcheck и сохранили их или смоделировали слой постоянства.

1 голос
/ 31 октября 2011

Я использую DBUnit в сочетании с базой данных H2 и по-прежнему и 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 в вашем classpath выглядит так:

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