【发布时间】:2020-06-08 23:06:50
【问题描述】:
我有一个具有以下场景的集成测试类:
我希望首先加载一个 sql 脚本。为此,我在类级别使用 Spring @Sql 注释
然后,我有一个 @BeforeAll (JUnit5) 方法,我只想在 @Sql 执行后执行一次。
我的问题是@BeforeAll 的内容是在导入@Sql 脚本之前执行的,而不是之后。
为什么会这样,我该怎么做才能颠倒顺序?
@SpringBootTest
@Transactional
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@Sql(scripts={"classpath:data-postgreForDemoAndIt.sql"}, executionPhase = BEFORE_TEST_METHOD)
public class DatingManagerIT {
(...)
@BeforeAll
public void init() {
MockitoAnnotations.initMocks(this);
Member memberDenise = memberDao.findByEmail("denise@yahoo.fr", Member.class).get();
Member memberAnne = memberDao.findByEmail("anne@yahoo.fr", Member.class).get();
Member memberJulien = memberDao.findByEmail("julien@yahoo.fr", Member.class).get();
memberDao.delete(memberDenise);
memberDao.delete(memberAnne);
memberDao.delete(memberJulien);
memberFactory.createSampleMembers();
}
(...)
}
【问题讨论】:
-
只是想检查为什么你不能作为第一步执行 init() 中的 sql 脚本并在类级别删除 sql 注释。
-
我实际上尝试了你所说的并注释了 init() 方法而不是类,但它并没有解决我的问题:在 @Sql 脚本之前执行 init() 中的指令已加载。
-
@Sql 在每个测试方法之前执行。如果你想执行一次,那么你需要在 init() 方法中作为第一步有问题地执行它。
标签: spring spring-boot junit5 spring-boot-test