我正在尝试使用 @Transactional
来测试我的应用程序,以在测试后回滚,并使用 @BeforeAll
设置测试对象:
@EnableJpaRepositories
@SpringBootTest
@Transactional
public class UserScoreTest {
@BeforeAll
public static void init() {
userRepository.save(user);
}
@Test
...
}
问题似乎是,一旦执行 @BeforeAll
,更改就会“提交”。
有人知道这是期望的行为还是错误吗?
我使用 @BeforeEach 解决了我的问题,然后在 @Test 中保存,它可以工作(测试后,所有内容都回滚),但我更愿意使用 @BeforeAll 设置一次。
最佳答案
我相信你的问题是@Transactional只适用于Spring“Bean”的实例方法,而不适用于静态方法。这就是为什么它适用于 @BeforeEach 实例方法,但不适用于 @BeforeAll 静态方法。
解决这个问题的一种方法是使用@BeforeEach,但有一个 boolean 字段来存储它是否已经完成一次。如果您的测试以多线程方式运行,请不要忘记解决线程问题。
This answer解释得更好。
关于java - @BeforeAll 和 @Transaction 不起作用 - 数据库端的更改不会回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58657587/