默认情况下,通过
@Sql执行的任何SQL脚本将在执行任何方法之前执行@Before。因此,你遇到的行为是正确的,但是你可以通过中的
executionPhase属性更改执行阶段@Sql(请参见下面的示例)。
如果要执行多个脚本,也可以通过来执行@Sql。
所以,如果你有一个清理脚本命名
clean-parametro.sql从删除PARAMETRO表,你可以注释类似下面的测试方法(而不是调用
JdbcTestUtils.deleteFromTables()你的
@Before方法)。
@Test@Sql({"dml-parametro.sql", "clean-parametro.sql"})public void test() { }当然,如果
dml-parametro.sql将值插入
PARAMETRO表中,则立即删除清理脚本中的这些值可能没有意义。
请注意,
@Sql并
@SqlConfig为脚本执行提供了多个配置级别。
例如,如果要在测试之前创建表并在测试之后进行清理,则可以在Java 8上执行以下操作:
@Test@Sql("create-tables.sql")@Sql(scripts = "clean-up.sql", executionPhase = AFTER_TEST_METHOD)public void test() { }或
@SqlGroup用作Java 6或Java 7上的容器:
@Test@SqlGroup({ @Sql("create-tables.sql"), @Sql(scripts = "clean-up.sql", executionPhase = AFTER_TEST_METHOD)})public void test() { }如果测试通过,
@Transactional并且你想要清除已提交的数据库状态,则可以指示Spring在新事务中执行清除SQL脚本,如下所示:
@Test@Sql("insert-test-data.sql")@Sql( scripts = "clean-up.sql", executionPhase = AFTER_TEST_METHOD, config = @SqlConfig(transactionMode = ISOLATED))public void test() { }我希望这可以为你澄清一切!
Cheers,
Sam (author of the Spring TestContext framework)
笔记:
AFTER_TEST_METHOD
是从静态导入的ExecutionPhase
ISOLATED
是从静态导入的TransactionMode



