Spring:如何在test方法的事务中执行`@Sql`?

时间:2018-04-13 13:44:43

标签: java spring integration-testing

我需要以下逻辑:
1.测试方法开始 2.交易开启 3.准备SQL文件执行
4.测试方法处理
5.交易回滚

我的测试类用

注释
@SpringBootTest
@Transactional
@Rollback(true)

我尝试在测试方法之前使用@org.springframework.test.context.jdbc.Sql但是它不起作用 - 看起来它打开一个事务,执行SQL,关闭事务(还原它?)然后开始测试。测试没有看到SQL文件的更改

我的问题是:如何在测试方法的事务中执行@org.springframework.test.context.jdbc.Sql?还有其他方法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

您应该查看config注释的@Sql属性,可以指定要使用的TransactionMode

因此,例如,在输入测试方法之前,以下脚本在单独的事务中执行:

@Sql(
  scripts = {"classpath:file1.sql", "classpath:file2.sql"},
  config = @SqlConfig(transactionMode = TransactionMode.ISOLATED))
@Test
public void foo() { ... }

答案 1 :(得分:0)

@Sql注释按预期工作。我有另一个问题 - 我的测试方法打开了新的Thread,它没有看到测试事务的变化