gpt4 book ai didi

java - @BeforeAll 和 @Transaction 不起作用 - 数据库端的更改不会回滚

转载 作者:行者123 更新时间:2023-12-02 09:21:42 25 4
gpt4 key购买 nike

我正在尝试使用 @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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com