Spring Boot-H2 DB多次测试执行脚本

时间:2018-09-03 06:22:48

标签: java spring junit h2

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

我正在使用以下注释:

-主要:

@SpringBootApplication
@EnableTransactionManagement

-测试类:

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

我想念什么?

1 个答案:

答案 0 :(得分:0)

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

例如

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

如果要在单个测试类的所有测试之前执行指定的测试。这就是棘手的地方-

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

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

请不要沿着这条路线走。

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

它们应该彼此独立。为什么?优点之一是    然后可以并行执行测试。而且,你永远也不会    想要一个新的测试来打破令人兴奋的测试,这仅仅是一种维护    噩梦等待发生。 (#truestory)


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