在添加了另一个应该使用@ActiveProfiles
的Test后,我得到了在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
的测试扩展了另一个测试here,但它不是。添加@ActiveProfiles
后,必须重新创建春季比赛,因为还有其他bean或其他设置取决于活动配置文件。但似乎数据库没有被删除。
我不想将schema.sql文件更改为类似的东西
create table exampleModel if not exists
因为这个脚本是间隔自动生成的,在我的生产环境中有很多自定义类型和表,我不想手动编辑。
重用数据库(因此没有为每个测试初始化)
mvn test
运行./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
要重用数据库模式,可以将hibernate.hbm2ddl.auto
(在testConfig.xml
中)值更改为例如update
。见:this
修改您的jdbc:embedded-database
标记如下:
<jdbc:embedded-database id="dataSource" generate-name="true">
有关更多详细信息,请参阅与embedded database support相关的Spring doc。