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中方法参数传递的问题

    浅谈Java中方法参数传递的问题

    下面小编就为大家带来一篇浅谈Java中方法参数传递的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • SpringSecurity中的Filter Chain(过滤器链)

    SpringSecurity中的Filter Chain(过滤器链)

    Spring Security的Filter Chain是由一系列过滤器组成的管道,每个过滤器执行特定的安全功能,Spring Security能够提供强大而灵活的安全控制机制,从而保护你的应用程序不受各种网络安全威胁的侵害,本文介绍SpringSecurity中的Filter Chain,感兴趣的朋友跟随小编一起看看吧
    2024-06-06
  • 一篇文章带你入门Java数据类型

    一篇文章带你入门Java数据类型

    下面小编就为大家带来一篇Java的基本数据类型)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2021-08-08
  • 通过实例深入学习Java的Struts框架中的OGNL表达式使用

    通过实例深入学习Java的Struts框架中的OGNL表达式使用

    这篇文章主要通过实例介绍了Java的Strus框架中的OGNL表达式使用,Struts框架是Java的SSH三大web开发框架之一,需要的朋友可以参考下
    2015-11-11
  • logback的addtivity属性定义源码解读

    logback的addtivity属性定义源码解读

    这篇文章主要为大家介绍了logback的addtivity属性定义源码解读,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • jmeter正则表达式的使用

    jmeter正则表达式的使用

    在jmeter中,可以利用正则表达式提取器来帮助我们完成这一动作,本文就详细的介绍一下应该如何使用,感兴趣的可以了解一下
    2021-11-11
  • 深入理解Java基础之try-with-resource语法糖

    深入理解Java基础之try-with-resource语法糖

    这篇文章主要介绍了深入理解Java基础之try-with-resource语法糖,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • Java中八种基本数据类型的默认值

    Java中八种基本数据类型的默认值

    这篇文章主要介绍了Java中八种基本数据类型的默认值 的相关资料,需要的朋友可以参考下
    2016-07-07
  • Spring ApplicationListener的使用详解

    Spring ApplicationListener的使用详解

    这篇文章主要介绍了Spring ApplicationListener的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • Java轻松使用工具类实现获取wav时间长度

    Java轻松使用工具类实现获取wav时间长度

    在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用工具类来获取一个wav文件的时间长度,感兴趣的同学继续往下阅读吧
    2021-10-10

最新评论