java|java 单元测试 对h2数据库数据清理方式
目录
- java 单元测试 对h2数据库数据清理
- 前因
- junit单元测试使用H2内存数据库
- 首先导入H2内存数据库
- 其次使用H2数据源模拟Oracle
- 下面来写个Junit4的单元测试类例子
java 单元测试 对h2数据库数据清理
前因
【java|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单元测试依赖。
com.h2database h21.4.185 testjunit junit4.11 test
其次使用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(IDNUMBER(38,0) PRIMARY KEY NOT NULL, PARAM1VARCHAR2(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 OpenCV图像处理之SIFT角点检测详解
- java中如何实现重建二叉树
- 数组常用方法一
- 【Hadoop踩雷】Mac下安装Hadoop3以及Java版本问题
- Java|Java基础——数组
- RxJava|RxJava 在Android项目中的使用(一)
- java之static、static|java之static、static final、final的区别与应用
- 女生该不该用小号测试男朋友()