Проблема, с которой я столкнулся
После добавления дополнительного теста, который должен использовать @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
, потому что этот скриптгенерируется автоматически с интервалами, и в моей производственной ситуации есть много пользовательских типов и таблиц, которые я не хочу редактировать вручную.
Что я хочу
повторное использование базы данных (так что это не такинициализируется для каждого теста)
Способ воспроизведения
Оформление заказа мой github-repo
пробег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