我有一个用@Sql(executionPhase = ExecutionPhase.BEFORE_TEST_METHOD, scripts="someScript")
注释的抽象类。
我有一个继承自抽象类的测试类。子类也使用@Sql(executionPhase = ExecutionPhase.BEFORE_TEST_METHOD, scripts="someOtherScript")
进行注释。
当我运行spring boot 1.2时,一切都按照我的预期运行:来自父类的脚本在子类之前运行。我升级到spring boot 1.3,现在,子类的@Sql
会覆盖父类的@Sql
,父类脚本永远不会运行。
使用spring boot 1.3有不同的方法吗?那么父类脚本是在子类脚本之前运行的吗?
答案 0 :(得分:4)
使用spring boot 1.3有不同的方法吗?那么父类脚本是在子类脚本之前运行的吗?
好的,经过一些调查工作,我已经找到了你问题的答案。
简答
不,不幸的是,你不想做什么。
详细答案
根据设计,从未支持将@Sql
的本地类级声明与超类上的类@Sql
的类级声明合并。本地声明始终旨在覆盖超类的声明。
因此,你只是幸运(或不幸,取决于你怎么看)它对你有用。
它曾经为你工作的唯一原因是由于Spring的核心错误支持查找@Repeatable
注释(详见SPR-13068)。
但是,在Spring Framework 4.2中修复了这个错误,并且自Spring Boot 1.3自动将Spring Framework依赖项升级到4.2,这就是为什么你在Spring Boot升级后注意到这个问题的原因。
此致
Sam( Spring TestContext Framework的作者)
答案 1 :(得分:3)
在@ SamBrannen的answer之后,我最终使用ScriptUtils.execute
方法从子类运行脚本。