java 单元测试 对h2数据库数据清理方式

 更新时间:2021年09月06日 09:38:21   作者:若不能同行_那么祝你一路顺风  
这篇文章主要介绍了java 单元测试 对h2数据库数据清理方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

java 单元测试 对h2数据库数据清理

前因

写测试框架的时候使用的精简测试框架不需要启动整个springboot,并不支持@Transactional测试后回滚h2数据库,而是在基础测试类里声明cleandb函数供使用,这就需要适配任意表的数据清除,不过更推荐不清理,以方法名为id使数据不重复即可

try{
      JdbcTemplate jdbcTemplate = 获取DataSource结构,反射或加载Bean等都可以,不要对业务代码侵入;
      Connection connection = jdbcTemplate.getDataSource().getConnection();//获取连接
      ResultSet tables = connection.getMetaData().getTables(null, null, null, new String[]{"TABLE"});//获取表名
      connection.close();//记得关闭连接,或者使用连接池
      while(tables.next()){
        //若是测试类的测试方法超过7,java.sql.Connection无法获取连接导致死循环
        jdbcTemplate.update("DELETE FROM " + tables.getObject("TABLE_NAME"));
        //spring-test-5.2.1.RELEASE-sources.jar!\org\springframework\test\jdbc\JdbcTestUtils.deleteFromTables如果使用了springtest可以代替使用该方法
      }
    } catch (SQLException e) {
      e.printStackTrace();
    }

junit单元测试使用H2内存数据库

首先导入H2内存数据库

Junit4单元测试依赖。

<dependency>
 <groupId>com.h2database</groupId>
 <artifactId>h2</artifactId>
 <version>1.4.185</version>
 <scope>test</scope>
</dependency>
<dependency>
 <groupId>junit</groupId>
 <artifactId>junit</artifactId>
 <version>4.11</version>
 <scope>test</scope>
</dependency

其次使用H2数据源模拟Oracle

@Component
@Profile("testOne") // 指定单元测试活动所匹配的数据源
public class DataSourceConfig4Test { 
    @Bean(name="dataSourceUtils") // 要和模拟的数据源名称相对应
    DataSource dataSourceUtils() throws SQLException {
        return new EmbeddedDatabaseBuilder()
                .setType(EmbeddedDatabaseType.H2)
                .addScript("classpath:/H2_TYPE.sql")
                .addScript("classpath:/INIT_TABLE.sql")
                .addScript("classpath:/H2_FUNCTION.sql")
                .addScript("classpath:/INIT_DATA.sql")   
                .build();
    }
}

H2_TYPE.sql (设置H2所模拟的数据库)

SET MODE Oracle;

INIT_TABLE.sql (单元测试需要的数据库表初始化)

CREATE TABLE TEST
(
    ID      NUMBER(38,0) PRIMARY KEY NOT NULL, 
    PARAM1  VARCHAR2(6) NOT NULL,
    PARAM2 VARCHAR2(6) NOT NULL,
 PARAM3 VARCHAR2(1) NOT NULL,
 PARAM4 VARCHAR2(50) NOT NULL
);

H2_FUNCTION.sql (不需要特殊方法时,此不可忽略)

CREATE ALIAS TO_DATE FOR "com.mvn.task.one.Function.toDate";

INIT_DATA.sql (初始化测试数据)

INSERT INTO TEST(ID,PARAM1,PARAM2,PARAM3,PARAM4)
VALUES(100,'TEST1','TEST2','2','JKL');

至此H2部分准备完毕

下面来写个Junit4的单元测试类例子

@ActiveProfiles("testOne") // 需要和H2模拟的数据源对应上
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:testspring/applicationContext-test-one.xml")
public class oneTest { 
 @Autowired
 private ITestService iTestService;
 @Test
 public void testBengin(){
     Test model = iSubcService.findTest("TEST1", "TEST2");
     Assert.assertNotNull(model);
 }
}

到此H2和Junit单元测试完成,另外一个数据源单元测试重复以上步骤即可~

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java ArrayList扩容问题实例详解

    Java ArrayList扩容问题实例详解

    这篇文章主要介绍了Java ArrayList扩容问题实例详解,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • Java下变量大小写驼峰、大小写下划线、大小写连线转换

    Java下变量大小写驼峰、大小写下划线、大小写连线转换

    有时候需要处理对象属性的getter、setter方法,或者将属性与数据表字段进行相互转换,感兴趣的可以了解一下
    2021-06-06
  • Spring JdbcTemplate执行数据库操作详解

    Spring JdbcTemplate执行数据库操作详解

    JdbcTemplate是Spring框架自带的对JDBC操作的封装,目的是提供统一的模板方法使对数据库的操作更加方便、友好,效率也不错,这篇文章主要介绍了Spring JdbcTemplate执行数据库操作,需要的朋友可以参考下
    2022-10-10
  • SpringBoot整合Druid数据库连接池的方法

    SpringBoot整合Druid数据库连接池的方法

    Druid是Java语言中最好的数据库连接池。Druid能够提供强大的监控和扩展功能。这篇文章主要介绍了SpringBoot整合Druid数据库连接池的方法,需要的朋友可以参考下
    2020-07-07
  • Java简单实现SpringMVC+MyBatis分页插件

    Java简单实现SpringMVC+MyBatis分页插件

    自己最近搭建的一个SpringMVC+Mybatis的框架 属于无实体类的框架 并实现了Myabtis的自动分页和总数查询 只要传入分页参数便能自动查询总数和分页 总数封装在参数里面执行查询后可以直接从参数中获取
    2015-09-09
  • Java Map 在put值时value值不被覆盖的解决办法

    Java Map 在put值时value值不被覆盖的解决办法

    这篇文章主要介绍了Java Map 在put值时value值不被覆盖的解决办法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-04-04
  • Springboot工具类FileCopyUtils使用教程

    Springboot工具类FileCopyUtils使用教程

    这篇文章主要介绍了Springboot内置的工具类之FileCopyUtils的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-12-12
  • Springboot 集成spring cache缓存的解决方案

    Springboot 集成spring cache缓存的解决方案

    这篇文章主要介绍了Springboot 集成spring cache缓存,使用缓存最关键的一点就是保证缓存与数据库的数据一致性,本文给大家介绍最常用的缓存操作模式,对Springboot 集成spring cache缓存操作流程感兴趣的朋友一起看看吧
    2022-06-06
  • SpringBoot实现过滤器、拦截器与切片的实现和区别

    SpringBoot实现过滤器、拦截器与切片的实现和区别

    本文详细介绍了使用过滤器、拦截器与切片实现每个请求耗时的统计,并比较三者的区别与联系,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • Spring Boot Actuator管理日志的实现

    Spring Boot Actuator管理日志的实现

    本文主要介绍了Spring Boot Actuator管理日志的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07

最新评论