Конфигурация Spring для встроенной базы данных H2 для тестов

Что реализовывает Вашу конфигурацию Spring для интеграционных тестов, похожи на использование встроенного h2 источника данных и, дополнительно, JUnit?

Моя первая попытка с SingleConnectionDataSource в основном работала, но перестала работать на более сложных тестах, где Вам нужны несколько соединений одновременно или приостановленных транзакций. Я думаю, что h2 в tcp базировался, режим сервера мог бы работать также, но это - вероятно, не самый быстрый режим связи для временной встроенной базы данных в памяти.

Каковы возможности и их преимущества / недостатки? Кроме того, как Вы составляете таблицы / заполняют базу данных?


Обновление: Давайте укажем некоторые конкретные требования, которые важны для таких тестов.

  • База данных должна быть временной и в памяти
  • Соединение не должно, вероятно, использовать tcp для требований к скорости
  • Было бы хорошо, если я мог бы использовать инструмент базы данных для осмотра содержания базы данных во время отладки
  • Мы должны определить источник данных, так как мы не можем использовать источник данных серверов приложений в модульных тестах

41
задан Community 23 May 2017 в 11:46
поделиться

2 ответа

[

]Думаю, для юнит-тестов лучше всего использовать производственную реализацию DataSource (только с другой строкой соединения).[

] [

]Во всяком случае, "не удалось на более сложных тестах" не дает достаточно информации для более детального ответа.[

] [

](Self-ad : []проверьте это[])[

].
0
ответ дан 27 November 2019 в 00:37
поделиться

В настоящее время я включаю в файл springconfig только для тестирования в качестве источника данных:

<bean id="database.dataSource" class="org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy">
    <constructor-arg>
        <bean class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
            <property name="driverClass" value="org.h2.Driver" />
            <property name="url"
                value="jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;MODE=Oracle;TRACE_LEVEL_SYSTEM_OUT=2" />
        </bean>
    </constructor-arg>
</bean>

<!-- provides a H2 console to look into the db if necessary -->
<bean id="org.h2.tools.Server-WebServer" class="org.h2.tools.Server" 
    factory-method="createWebServer" depends-on="database.dataSource" 
    init-method="start" lazy-init="false">
    <constructor-arg value="-web,-webPort,11111" />
</bean>

Создание / удаление таблиц может быть выполнено с помощью executeSqlScript при переопределении AbstractAnnotationAwareTransactionalTests.onSetUpBeforeTransaction или с помощью SimpleJdbcTestUtils.executeSqlScript в соответствующем месте.

Сравните также это сообщение .

18
ответ дан 27 November 2019 в 00:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: