在公司项目中对单测框架做升级的时候,引入了h2数据库,同时希望每个case在访问h2做读写操作之后,不会影响下一个case对h2的数据访问。
1、最先想到的肯定是dbunit和unitils,但经过调研,发现和现有单测框架存在测试入口不一致、构造数据过程繁琐、xml导入的方式或者xsl的方式相比于SQL脚本来说更加麻烦等问题,所以就否了。
2、其次想到的是采用事务管理,spring的testcontext框架中提供了AbstractTransactionalJUnit4SpringContextTests来支持case的事务。每个case之前行都灌入数据,case执行完再通过事务roll back。但是由于系统存在多达30套的datasource,而且并非是由JTA管理。而spring的AbstractTransactionalJUnit4SpringContextTests只能支持单datasource。其源码如下。因而该方案也被否了。
/** * Set the DataSource, typically provided via Dependency Injection. */ @Autowired public void setDataSource(DataSource dataSource) { this.simpleJdbcTemplate = new SimpleJdbcTemplate(dataSource); }
3、第三个想到的是采用spring单测框架中所提供的@DirtiesContext注解,让每个case启动前都去重新加载一遍spring上下文,这样的话,等于每次都把h2数据库给清空了,似乎这样就可以完美地解决问题,但是根据了解,DirtiesContext注解很吃内存,如果case数量太多,会严重影响执行时间,甚至让工程无法install成功,直接导致CI任务执行失败。所以这个方案也被否了。
4、最后采用的折衷方案是,让每个case在执行前执行建库建表语句,再写所需要的DML语句(注解化),case执行完再把所有表删除。其中的建表删表操作都是由框架负责,对使用者透明。这个方案和系统目前使用的单测框架能够很好结合。
所以得出的一个小经验是,没有最好的技术,只有最合适的技术。
相关推荐
IEEE33节点数据(case33bw.m)
JavaDB_Use_Case JavaDB_Use_Case JavaDB_Use_Case
IEEE118节点标准参数及潮流计算数据
mysql 中case when 遇到乱码解决。查询语句中含有case引起中文乱码解决方法
傅里叶变换,基2时间变换
前段时间上传了一个fluent大批量数据处理的代码,经过同学运行发现,当fluent导出数据量到excel时,因为超过百兆太大不支持,于是稍微改写了一下,这样可以选择 以dat格式或则txt格式储存,然后在运用该段代码处理...
Verilog语言中case语句详解及优化 详细讲解了case语句的原理、实现。并说明了如何合理使用case从而实现程序的优化配置
电力系统IEEE57节点系统潮流计算所需数据
asp源码—Excel二维表数据转SELECT CASE 工具 v2.0.zip asp源码—Excel二维表数据转SELECT CASE 工具 v2.0.zip asp源码—Excel二维表数据转SELECT CASE 工具 v2.0.zip asp源码—Excel二维表数据转SELECT CASE 工具 v...
达梦数据库CASE_SENSITIVE参数学习报告
SQL中Case语句用法讨论_BJSQL中Case语句用法讨论_BJSQL中Case语句用法讨论_BJSQL中Case语句用法讨论_BJSQL中Case语句用法讨论_BJSQL中Case语句用法讨论_BJSQL中Case语句用法讨论_BJSQL中Case语句用法讨论_BJSQL中...
R and data mining examples and case studies 对应的代码和数据
Excel二维表数据转SELECT CASE 工具操作步骤 1. 复制Excel二维结构表到上边文本框。 2. 提交得到:asp php js三种语言的switch case。 备注: 1. 复制数据:首行列标题,以后一行一条数据。单元格不能有回车和...
1 case when 写法 2 sum case when 用法 3 select 拼接字段 示例如下: when 2 then 'C' else 'D' end ) as '类型',count(*) as '数量' from table group by orderType
测试用例(Test Case)是将软件测试的行为活动做一个 测试用例 测试用例 科学化的组织归纳,目的是能够将软件测试的行为转化成可管理的模式;同时测试用例也是将测试具体量化的方法之一,不同类别的软件,测试用例是...
可以用来学习数据挖掘,机器学习算法的数据集
JavaScript中if与case比较,有些需要大于6个if的情况下就需要考虑用case了,因为case在这种情况下的性能是高于使用if的。
39.java中的case穿透案例.zip39.java中的case穿透案例.zip39.java中的case穿透案例.zip39.java中的case穿透案例.zip39.java中的case穿透案例.zip39.java中的case穿透案例.zip39.java中的case穿透案例.zip39.java中的...