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

fed*_*lov 5 java spring integration-testing

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

我的测试类注释为

@SpringBootTest
@Transactional
@Rollback(true)
Run Code Online (Sandbox Code Playgroud)

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

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

joh*_*den 9

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

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

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


fed*_*lov 1

@Sql注释按预期工作。我遇到了另一个问题 - 我的测试方法打开了新线程,但没有看到测试事务的更改