Что реализовывает Вашу конфигурацию Spring для интеграционных тестов, похожи на использование встроенного h2 источника данных и, дополнительно, JUnit?
Моя первая попытка с SingleConnectionDataSource в основном работала, но перестала работать на более сложных тестах, где Вам нужны несколько соединений одновременно или приостановленных транзакций. Я думаю, что h2 в tcp базировался, режим сервера мог бы работать также, но это - вероятно, не самый быстрый режим связи для временной встроенной базы данных в памяти.
Каковы возможности и их преимущества / недостатки? Кроме того, как Вы составляете таблицы / заполняют базу данных?
Обновление: Давайте укажем некоторые конкретные требования, которые важны для таких тестов.
]Думаю, для юнит-тестов лучше всего использовать производственную реализацию DataSource (только с другой строкой соединения).[
] []Во всяком случае, "не удалось на более сложных тестах" не дает достаточно информации для более детального ответа.[
] [](Self-ad : []проверьте это[])[
].В настоящее время я включаю в файл 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 в соответствующем месте.
Сравните также это сообщение .