数据库
首页 > 数据库> > 春季-使用注释@Sql,是否可以在方法级别之前在类级别执行脚本?

春季-使用注释@Sql,是否可以在方法级别之前在类级别执行脚本?

作者:互联网

我想在每个测试方法之前执行两个脚本,但是我也想定义一些要在特定方法之前执行的脚本.使用Spring框架和@Sql注释,可以吗?

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/WEB-INF/application-context.xml")
@DirtiesContext(classMode = ClassMode.BEFORE_EACH_TEST_METHOD)
@Sql({ "/database/drop_schema.sql", "/database/create_schema.sql" })
public class CentralServiceTestCase {

  // I want to run "drop_schema.sql", "create_schema.sql" 
  // and "basic_data.sql" here
  @Test
  @Sql({ "/database/basic_data.sql" })       
  public void processActionWithSuccess() {

  }

  // I want to run only "drop_schema.sql" and "create_schema.sql" here
  @Test 
  public void anotherTestMethod() {

  }

}

运行此代码仅执行“ basic_data.sql”.如何解决这个问题呢?我将不得不从类中删除@Sql注释,并为每个定义了“ /database/drop_schema.sql”和“ /database/create_schema.sql”的方法复制它?

解决方法:

更新:这可能在SPR-14357中得到解决.

@Sql的Javadoc的第二段明确指出:

Method-level declarations override class-level declarations.

这也记录在参考手册的Executing SQL scripts declaratively with @Sql部分中.

因此,不,如果在方法级别也定义了@Sql,则不幸的是无法在类级别执行通过@Sql声明的脚本.

如果您希望Spring支持此类组合,请create a JIRA issue请求此功能并选择“测试组件”.

谢谢!

Sam(Spring TestContext Framework的作者)

标签:spring-test,spring
来源: https://codeday.me/bug/20191027/1947583.html