1. 环境配置
- Springboot 2.7.8
- h2 2.1.214
2. 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,内容为建表语句。
4. 编写单测代码
使用 @DataJpaTest 测试spring-data-jpa 框架下的数据层,@TestPropertySource 引入指定配置文件, @ContextConfiguration 引入springboot上下文。
点击查看代码- @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);
- }
- }
- }
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |