春季-使用注释@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