最近需要开发一个组件,里面会有数据库操作,但由于该组件是单独开发没有实际的数据库,数据库后期会创建到集成该组件的业务系统里面。所以想到用内存数据来做测试,也避免了拿真实数据库作测试时留下垃圾数据,而且速度还比较快。
经历了一顿操作,终于搭好了单元测试环境。
¶POM文件
1 | <dependencies> |
¶配置文件application.yml
1 | spring: |
¶创建DO层
- Entity
1 |
|
- Repository
1 |
|
JPA的使用和配置参考淋哥的:Spring data jpa使用总结
¶单元测试
1 | (SpringRunner.class) |
TimeLimitTestApplication代码如下:
1 |
|
¶遇到的问题
- table not found
h2数据库初始化的时候,已经执行了初始化脚本,但是执行单元测试时找不到表,经过排查,发现创建数据库脚本如下:
1 | set search_path to test; |
该脚本在真实数据库中执行没有任何问题,但是在h2数据库中,并不能将表正确的创建到test模式中,而是创建到PUBLIC模式中了,导致找不到表。
修改脚本如下:
1 | set search_path to test; |
即可解决该问题。
- schema not found
由于JPA不区分大小写,注解里面配置的都会转成小写(可以通过配置:
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl即可解决表名,但是schema都是小写)。而H2数据库是区分大小写的,因此可能导致schema not found。
只要统一大小写即可处理。