将超类中的@Sql与子类中的@Sql合并

时间:2016-09-02 15:47:52

标签: java spring testing spring-boot spring-test

我有一个用@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有不同的方法吗?那么父类脚本是在子类脚本之前运行的吗?

2 个答案:

答案 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方法从子类运行脚本。