1. 环境配置
- Springboot 2.7.8
- h2 2.1.214
2. POM文件
- 引入springboot parent pom
点击查看代码
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.8</version>
<relativePath/>
</parent>
- 引入junit , springboot-test, spring-data-jpa, H2
点击查看代码
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>
3. H2配置
H2是一款内存数据库,可以配合单测测试数据层。实现原理是将依赖的三方数据库通过内存的方式进行mock。其中H2数据库的数据表结构以及数据可以通过sql脚本文件初始化,也可以在代码中增删数据。
test/resources/h2conf.properties
#使用h2数据库
spring.datasource.url=jdbc:h2:mem:test;MODE=Oracle;
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.driver-class-name=org.h2.Driver
spring.sql.init.platform=h2
#数据初始化脚本地址
spring.sql.init.schema-locations=classpath:script/schema-h2.sql
# jpa配置
spring.jpa.database=h2
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=none
spring.jpa.generate-ddl=false
spring.jpa.open-in-view=true
spring.main.banner-mode=off
在 test/resources/script 下创建schema-h2.sql,内容为建表语句。文章来源:https://www.toymoban.com/news/detail-470937.html
4. 编写单测代码
使用 @DataJpaTest 测试spring-data-jpa 框架下的数据层,@TestPropertySource 引入指定配置文件, @ContextConfiguration 引入springboot上下文。文章来源地址https://www.toymoban.com/news/detail-470937.html
点击查看代码
@DataJpaTest
@ContextConfiguration(classes=Application.class)
@TestPropertySource(locations = {"classpath:h2conf.properties"})
public class ServiceImplDaoTest {
private SomeServiceImpl service;
@Autowired
private SomeRepository repository;
@Autowired
private TestEntityManager entityManager;
@BeforeEach
public void setUp() {
service = new SomeServiceImpl();
ReflectionTestUtils.setField(service, "repository", repository);
}
@Test
public void testSelect() {
insertData();
List<SomeEntity> all = service.findAll();
Assertions.assertEquals(10, all.size());
}
/**
* for test sql
*/
public void insertData() {
// mock 10 data
for (int i = 0; i < 10; i++) {
SomeEntity entity = new SomeEntity();
entityManager.persist(entity);
}
}
}
到了这里,关于【单元测试】Spring Data JPA + H2 测试DAO层的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!