我需要以下逻辑:
1.测试方法开始
2.交易开启
3.准备SQL文件执行
4.测试方法处理
5.交易回滚
我的测试类用
注释@SpringBootTest
@Transactional
@Rollback(true)
我尝试在测试方法之前使用@org.springframework.test.context.jdbc.Sql
但是它不起作用 - 看起来它打开一个事务,执行SQL,关闭事务(还原它?)然后开始测试。测试没有看到SQL文件的更改
我的问题是:如何在测试方法的事务中执行@org.springframework.test.context.jdbc.Sql
?还有其他方法可以解决这个问题吗?
答案 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,它没有看到测试事务的变化