Весенний тест: база данных инициализируется дважды в тесте - PullRequest
0 голосов
/ 29 ноября 2018

Проблема, с которой я столкнулся

После добавления дополнительного теста, который должен использовать @ActiveProfiles, я получил исключения, которые возникают, когда скрипт database-schema.sql выполняется дважды в одной и той же базе данных.

Какие рамки я использую

  • spring:3.2.13.Release & spring-data-jpa:1.6.5.RELEASE & hsqldb:2.3.2 & hibernate-entitymanager:4.3.1.FINAL
  • junit:4.12 & spring-test:3.2.13.RELEASE

Что я использую в своем коде / тестах

  • для создания источника данных, который я использую <jdbc:embedded-database id="dataSource"> в моих .../test/resources/spring/testConfig.xml
  • @RunWith(SpringJUnit4ClassRunner.class) и @ContextConfiguration(locations = {"classpath:spring/testConfig.xml"})для обоих моих тестов
  • тест с @ActiveProfiles продлил другой тест <- я проверил, если это проблема <a href="https://github.com/babielrvo/spring-test/tree/activeProfileTestWithoutExtendedClass" rel="nofollow noreferrer"> здесь , но это не так.

My Guess

после добавления @ActiveProfiles весенний конкурс должен быть воссоздан, потому что есть другие бобы или другие настройки, которые зависят от активного профиля.Но похоже, что база данных не удалена.

Что я не хочу

Я не хочу менять файл schema.sql на что-то вроде

create table exampleModel if not exists 

, потому что этот скриптгенерируется автоматически с интервалами, и в моей производственной ситуации есть много пользовательских типов и таблиц, которые я не хочу редактировать вручную.

Что я хочу

повторное использование базы данных (так что это не такинициализируется для каждого теста)

Способ воспроизведения

  1. Оформление заказа мой github-repo

  2. пробегmvn test in ./test/

Исключение

java.lang.IllegalStateException: Failed to load ApplicationContext
...
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [spring/testConfig.xml]: Cannot resolve reference to bean 'dataSource' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource': Invocation of init method failed; nested exception is org.springframework.dao.DataAccessResourceFailureException: Failed to execute database script; nested exception is org.springframework.jdbc.datasource.init.ScriptStatementFailedException: Failed to execute SQL script statement at line 1 of resource class path resource [testDB/schema.sql]: CREATE TYPE TEXT AS VARCHAR(1000000)
...
Caused by: java.sql.SQLSyntaxErrorException: object name already exists: TEXT in statement [CREATE TYPE TEXT AS VARCHAR(1000000)]
...
Caused by: org.hsqldb.HsqlException: object name already exists: TEXT

Ответы [ 2 ]

0 голосов
/ 09 апреля 2019

Измените тег jdbc:embedded-database следующим образом:

<jdbc:embedded-database id="dataSource" generate-name="true">

Подробнее см. Документ Spring, связанный с поддержкой встроенной базы данных .

0 голосов
/ 29 ноября 2018

Для повторного использования схемы базы данных вы можете изменить значение hibernate.hbm2ddl.autotestConfig.xml), например, update.Смотри: это

...