Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring boot-h2 DB测试多次执行脚本_Java_Spring_Junit_H2 - Fatal编程技术网

Java Spring boot-h2 DB测试多次执行脚本

Java Spring boot-h2 DB测试多次执行脚本,java,spring,junit,h2,Java,Spring,Junit,H2,我正在做一些JUnit测试,我只需要执行一次SQL脚本,但似乎每个测试执行一次 我将使用以下注释: -主要内容: @SpringBootApplication @EnableTransactionManagement -测试等级: @Sql({ "classpath:insertMessage.sql" }) @Transactional public class ServiceTest { 我错过了什么 如果您只希望使用脚本影响单个测试,只需添加方法即可。 比如说 @Sql({ "clas

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

我将使用以下注释:

-主要内容:

@SpringBootApplication
@EnableTransactionManagement
-测试等级:

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

我错过了什么

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

比如说

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

如果希望在单个测试类的所有测试之前执行指定的测试。这就是问题的症结所在-

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

接下来,您可能会发现
@Commit
注释,这意味着您可以 提交通过测试所做的所有更改。(
@Transaction
的默认值 行为是在测试后回滚所有更改)现在,您可以 考虑一下,<代码> @提交<代码>单哑测试,在您之前执行 其他测试

请不要走这条路

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

它们应该相互独立。为什么?一个好处是,, 然后可以并行执行测试。但是,你永远不会 想要一个新的测试来打破激动人心的测试,那只是一个维护 噩梦即将发生。(#真实故事)



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

所有的测试都应该依赖于脚本中的更改吗?我刚刚更改了它,并且在每个测试中都会执行它,但是我对数据库的主键有一个问题,它在每个测试中都会自动递增。我怎样才能阻止这一切?我希望每次测试都是1。这是id字段的注释:@id@GeneratedValue(strategy=GenerationType.SEQUENCE)@Column(name=“id”,updateable=false,nullable=false)您应该将其硬代码添加到测试中。例如,在测试表(id,文本值)中插入值(1,“测试”);谢谢,这就解决了,但我希望它是自动分配的。只是一个完整的回滚。这不可能吗?将@Transaction添加到您的测试中应该会在测试完成后返回角色。是的,对于寄存器是这样,但id仍然在增加。当一个测试使用my insertMessage.sql时,数据库表将始终有一个寄存器,但问题是,如果我不使用某个id,它将在每个测试中增加一个。我希望id为1,而不必设置它。谢谢你的回答