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

网友投稿 525 2022-09-29


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

目录java 单元测试 对h2数据库数据清理前因junit单元测试使用H2内存数据库首先导入H2内存数据库其次使用H2数据源模拟Oracle下面来写个Junit4的单元测试类例子

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

h2

1.4.185

test

junit

junit

4.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

(

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 (初始化测试数据)

INShttp://ERT 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单元测试完成,另外一个数据源单元测试重复以上步骤即可~


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:WordPress4.9 最新版本网站安全漏洞详情与修复(wordpress4.9渗透实战)
下一篇:网站安全检测之逻辑漏洞检测 修复方案(漏洞检测)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~