首页 > 其他分享 >【单元测试】Spring Data JPA + H2 测试DAO层

【单元测试】Spring Data JPA + H2 测试DAO层

时间:2023-06-04 18:45:21浏览次数:30  
标签:JPA Spring DAO H2 h2 jpa sql spring test

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,内容为建表语句。

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);
        }
    }

}

标签:JPA,Spring,DAO,H2,h2,jpa,sql,spring,test
From: https://www.cnblogs.com/nanzhuli/p/17455787.html

相关文章

  • 面试官:我们简单聊一下SpringBoot的启动流程吧。
    SpringBoot启动原理每次看到这个问题总是不能理出一条线来回答流畅,这次理出一条八股文标准答案出来。复习的时候拿出来过一过思路。如果有不合适的地方希望各位大佬指教~[源码基于springboot2.4.3]框架启动类每个SpringBoot项目都有一个标注着@SpringBootApplication注解的main启动......
  • Spring Bean生命周期之三级缓存循环依赖
    目录1三级缓存1.1引言1.2三级缓存各个存放对象1.3解决循环依赖条件1.3.1解决循环依赖条件1.3.2Sprin中Bean的顺序1.3.3更改加载顺序1.3.3.1构造方法依赖(推荐)1.3.3.2参数注入1.3.3.3@DependsOn(“xxx”)1.3.3.4BeanDefinitionRegistryPostProcessor接口1.3.4执行顺......
  • spring整合mybatisplus
    配置文件注解配置mapper扫描:@MapperScan("com.bjsxt.mybatisplus_lombok_swagger.mapper")pom<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!--mybatisp......
  • springboot整合mybatis
    整合mybatis基础配置启动类添加@MapperScan配置文件#=================================数据库相关配置====================================spring.datasource.driver-class-name=com.mysql.jdbc.Driverspring.datasource.url=jdbc:mysql://10.1.1.1:3306/db?useUnico......
  • Spring Quartz2.x
    Spring3整合Quartz2实现定时任务二:动态添加任务[url]http://www.dexcoder.com/selfly/article/308[/url][color=red]Spring3整合Quartz2实现定时任务三[/color]:动态暂停恢复修改和删除任务[url]http://www.dexcoder.com/selfly/article/311[/url]Quartz的cron表达式[url......
  • spring aop 如何切面到mvc 的controller, service
    [size=large][color=red]Spring+SpringMVC+Mybatis利用AOP自定义注解实现可配置日志快照记录[/color][/size][url]http://unkeltao.com/blog/2014/07/22/spring-plus-springmvc-plus-mybatis-aop/[/url][size=large][color=red]拦截Controller[/color][/si......
  • SpringMVC 3使用Fastjson代替Jackson
    [size=large][color=red]Json解析教程(四.FastJson的使用)[/color][/size][url]http://zyjustin9.iteye.com/blog/2020533[/url]1.[代码][Java]代码publicclassUser{privateLongid;privateStringname;publicLonggetId(){retur......
  • spring mvc 请求转发和重定向
    1.需求背景需求:springMVC框架controller间跳转,需重定向。有几种情况:不带参数跳转,带参数拼接url形式跳转,带参数不拼接参数跳转,页面也能显示。本来以为挺简单的一件事情,并且个人认为比较常用的一种方式,一百度全都有了,这些根本不是问题,但是一百度居然出乎我的意料,一堆都不是我想......
  • SpringMVC 转换ajax的json数据乱码问题
    在springmvc3中,已经集成了Jackson(json处理器)来处理数据输出json格式,spring中封装的类是[color=blue]org.springframework.http.converter.json.MappingJackson2HttpMessageConverter[/color]这个json转换器,如果是[color=red]springmvc3.2[/color]之前的版本,可以使用[color=b......
  • Spring MVC 全局的异常处理
    Spring异常处理配置[url]http://panyongzheng.iteye.com/blog/2208146[/url]spring基于注解的全局异常处理方式[url]http://panyongzheng.iteye.com/blog/2067110[/url]使用SpringMVC统一异常处理实战[url]http://panyongzheng.iteye.com/blog/2213655[/url][color=red]怎么......