Spring boot - h2 DB不止一次测试执行脚本

问题描述 投票:0回答:1

我正在做一些JUnit测试,我只需要执行一次SQL脚本,但似乎它每次测试都执行一次。

我正在使用下一个注释:

-主要:

@SpringBootApplication
@EnableTransactionManagement

- 测试类:

@Sql({ "classpath:insertMessage.sql" })
@Transactional
public class ServiceTest {

我错过了什么?

java spring junit h2
1个回答
0
投票

如果您希望仅使用脚本影响单个测试,只需添加方法即可。

例如

@Sql({ "classpath:insertMessage.sql" })
@Test
public void myExtremlyBadTestMethodNamingConventionTest() {

如果您希望在单个测试类的所有测试之前执行指定的测试。这是它变得棘手的地方 -

首先,您可以考虑将@SQL添加到@BeforeClass,但这是不可能的,因为@SQL不支持@BeforeClass(或@Before)。

接下来,您可能会发现@Commit注释,这意味着您可以提交使用Test进行的所有更改。 (@Transaction的默认行为是在测试后回滚所有更改)现在,您可以考虑,在所有其他测试之前执行@Commit单个虚拟测试?

不,请不要走这条路。

JUnit不保证测试执行的顺序。 (这是设计的)因为您的测试不应该依赖于其他测试的结果。

它们应该相互独立。为什么?一个优点是,然后可以并行执行测试。而且,你永远不会想要一个新的测试来打破令人兴奋的测试,它只是一个等待发生的维护噩梦。 (#真实的故事)


此外,在这种情况下,您希望在所有测试之前执行指定的脚本,您可以将import.sql文件添加到测试的资源中。 Spring Boot会在测试前自动检查它并为您执行。换句话说,它将为您的所有测试设置特定状态的数据库。

© www.soinside.com 2019 - 2024. All rights reserved.