Spring Test:数据库在测试中初始化两次

问题描述 投票:2回答:2

The problem I got

在添加了另一个应该使用@ActiveProfiles的Test后,我得到了在database-schema.sql脚本在同一个数据库上运行两次时出现的异常。

What framework i use

  • spring:3.2.13.Releasespring-data-jpa:1.6.5.RELEASEhsqldb:2.3.2hibernate-entitymanager:4.3.1.FINAL
  • junit:4.12spring-test:3.2.13.RELEASE

What do i use in my code/tests

  • 创建数据源我在我的<jdbc:embedded-database id="dataSource">中使用.../test/resources/spring/testConfig.xml
  • @RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations = {"classpath:spring/testConfig.xml"})进行了我的测试
  • @ActiveProfiles的测试扩展了另一个测试here,但它不是。

My Guess

添加@ActiveProfiles后,必须重新创建春季比赛,因为还有其他bean或其他设置取决于活动配置文件。但似乎数据库没有被删除。

What i dont want

我不想将schema.sql文件更改为类似的东西

create table exampleModel if not exists 

因为这个脚本是间隔自动生成的,在我的生产环境中有很多自定义类型和表,我不想手动编辑。

What i want

重用数据库(因此没有为每个测试初始化​​)

Way to reproduce

  1. 结帐my github-repo
  2. mvn test运行./test/

Exception

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
java spring spring-jdbc spring-test
2个回答
0
投票

要重用数据库模式,可以将hibernate.hbm2ddl.auto(在testConfig.xml中)值更改为例如update。见:this


0
投票

修改您的jdbc:embedded-database标记如下:

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

有关更多详细信息,请参阅与embedded database support相关的Spring doc。

© www.soinside.com 2019 - 2024. All rights reserved.