在 H2DB 中使用 @DataJpaTest 时出现太多 DDL
Too many DDL occur when using @DataJpaTest in H2DB
我把JUnit4
改成了JUnit5
。
之前也是用 MSSQL
进行测试,但我们将其更改为 H2DB
。
这个时候出现问题
我的遗留项目有大约 400 个表。
如果您使用 @DataJpaTest
进行持久性测试,发生超过 400 个 CREATE DDL。
我寻找解决这个问题的方案,但我找到的最好看的方案是在 schema.sql
.
中预先编写大约 400 个 Create DDL
我想要的
我想创建一个MEMBER table
只有当有如下代码时,并且只测试MEMBER table
。
public interface MemberRepository extends JpaRepository<Member, Long>{
}
您有什么有用的功能或解决方案 JUnit5
吗?
创建application-test.yml用于测试配置并将ddl-auto设置为none.
申请-test.yml
spring:
jpa:
show-sql: true
hibernate:
ddl-auto: none
使用@ActiveProfiles("test")
启动应用程序-test.yml和@Sql("Member.sql")
测试脚本。
@ActiveProfiles("test")
@DataJpaTest
public class MemberRepositoryTests {
@Autowired
private MemberRepository memberRepository;
@Test
@Sql("Member.sql")
public void testSomething() {
Member member = memberRepository.findById(1L).orElse(null);
assertThat(member).isNotNull();
assertThat(member.getId()).isEqualTo(1L);
}
}
创建 Member.sql 到 scr/test/resource/com.yourpackage
create table if not exists member (id bigint not null, primary key (id));
insert into member (id) values (1);
在这种情况下,DDL 不会创建 table,您可以将 sql 自定义为 运行 MemberRepository 上的内容。
完整代码为here.
我把JUnit4
改成了JUnit5
。
之前也是用 MSSQL
进行测试,但我们将其更改为 H2DB
。
这个时候出现问题
我的遗留项目有大约 400 个表。
如果您使用 @DataJpaTest
进行持久性测试,发生超过 400 个 CREATE DDL。
我寻找解决这个问题的方案,但我找到的最好看的方案是在 schema.sql
.
我想要的
我想创建一个MEMBER table
只有当有如下代码时,并且只测试MEMBER table
。
public interface MemberRepository extends JpaRepository<Member, Long>{
}
您有什么有用的功能或解决方案 JUnit5
吗?
创建application-test.yml用于测试配置并将ddl-auto设置为none.
申请-test.yml
spring:
jpa:
show-sql: true
hibernate:
ddl-auto: none
使用@ActiveProfiles("test")
启动应用程序-test.yml和@Sql("Member.sql")
测试脚本。
@ActiveProfiles("test")
@DataJpaTest
public class MemberRepositoryTests {
@Autowired
private MemberRepository memberRepository;
@Test
@Sql("Member.sql")
public void testSomething() {
Member member = memberRepository.findById(1L).orElse(null);
assertThat(member).isNotNull();
assertThat(member.getId()).isEqualTo(1L);
}
}
创建 Member.sql 到 scr/test/resource/com.yourpackage
create table if not exists member (id bigint not null, primary key (id));
insert into member (id) values (1);
在这种情况下,DDL 不会创建 table,您可以将 sql 自定义为 运行 MemberRepository 上的内容。
完整代码为here.