我正在做一些JUnit测试,我只需要执行一次SQL脚本,但是似乎每个测试只执行一次。
我正在使用以下注释:
-主要:
@SpringBootApplication
@EnableTransactionManagement
-测试类:
@Sql({ "classpath:insertMessage.sql" })
@Transactional
public class ServiceTest {
我想念什么?
答案 0 :(得分:0)
如果只希望使用脚本影响单个测试,只需添加方法即可。
例如
@Sql({ "classpath:insertMessage.sql" })
@Test
public void myExtremlyBadTestMethodNamingConventionTest() {
如果要在单个测试类的所有测试之前执行指定的测试。这就是棘手的地方-
首先,您可以考虑将@SQL添加到@BeforeClass,但是 这是不可能的,因为@SQL不支持@BeforeClass (或@Before)。
接下来,您可能会发现@Commit
批注,这意味着您可以
提交通过测试进行的所有更改。 (@Transaction
是默认值
行为是在测试后回滚所有更改)现在,您可能
考虑一下,@Commit
单个虚拟测试要在您所有之前执行
其他测试?
否请不要沿着这条路线走。
JUnit不保证执行的顺序 测试。 (这是设计使然),因为您的测试不应依赖 其他测试的结果。
它们应该彼此独立。为什么?优点之一是 然后可以并行执行测试。而且,你永远也不会 想要一个新的测试来打破令人兴奋的测试,这仅仅是一种维护 噩梦等待发生。 (#truestory)
另外,在这种情况下,如果您希望在所有测试之前执行指定的脚本,则可以将import.sql文件添加到测试的资源中。 Spring Boot将在测试之前自动检查它并为您执行它。换句话说,它将为所有测试将数据库设置为特定状态。