【问题标题】:Merging @Sql from superclass with @Sql in subclass将超类中的@Sql 与子类中的@Sql 合并
【发布时间】:2017-01-10 19:14:46
【问题描述】:

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

【问题讨论】:

  • 您是否绝对肯定您没有更改任何的相关代码?
  • 您能否告诉我们您在迁移之前之后使用的spring-test的确切版本?
  • 仅供参考:如果您从 Spring Framework 4.1 升级到 Spring Framework 4.2,那么以下问题可能是导致不同行为的原因:jira.spring.io/browse/SPR-13068
  • 请注意,如果您发现问题的其中一个答案可以接受,请随时accept it

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


【解决方案1】:

使用 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 框架的作者

【讨论】:

    【解决方案2】:

    在@SamBrannen 的answer 之后,我最终使用ScriptUtils.execute 方法从子类运行脚本。

    【讨论】:

      猜你喜欢
      • 2019-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-29
      • 1970-01-01
      • 2015-07-30
      • 1970-01-01
      相关资源
      最近更新 更多