【发布时间】:2017-10-10 09:35:49
【问题描述】:
我有在内存数据库上执行的集成测试。每个测试的签名或多或少看起来像这样:
@RunWith(SpringRunner.class)
@SpringBootTest
@Sql("/clean-data-in-all-tables.sql")
public class SomeTest {
@Test
public void shouldDoSomehting() {}
}
在测试上下文初始化期间,数据库模式由 Hibernate 重新创建:
spring:
jpa:
hibernate:
ddl-auto: create-drop
我希望在初始化上下文和生成数据库模式之后执行 sql 脚本。但是在某些情况下,clean-data-in-all-tables.sql 在架构生成之前执行,它会失败,因为它需要尚未创建的表。
我已经按照我解释的方式编写了 500 多个测试,并且在我添加了几个类似的测试之前,它们都运行良好。
当我通过 Gradle 或 IntelliJ 一起执行测试时,测试失败。 请注意,失败的测试不是最近添加的测试。这是与我添加的完全无关的旧测试。同样奇怪的是,失败的测试如果我通过 IntelliJ 一个一个运行效果很好。
它看起来像 spring-boot 的错误,但我仍然试图找到解决它的方法。与此同时,我尝试了很多方法来解决这个问题,但没有一个是有帮助的。
请分享您对我的代码有什么帮助以及可能有什么问题的想法。
更新:
找到解决方法:将spring.jpa.hibernate.ddl-auto 从create-drop 更改为create 即可解决问题。
但问题仍然悬而未决这种奇怪行为的原因是什么?
【问题讨论】:
-
您是否添加了任何新配置? SpringBootTest 正在寻找从测试包到项目根目录的配置。
-
不,我没有引入任何新配置,也没有更改现有配置。
标签: java spring-boot junit spring-boot-test