单测中隔离每个case对DB数据操作
来源:互联网 发布:重装系统c盘数据恢复 编辑:程序博客网 时间:2024/06/06 09:47
在公司项目中对单测框架做升级的时候,引入了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. */@Autowiredpublic void setDataSource(DataSource dataSource) {this.simpleJdbcTemplate = new SimpleJdbcTemplate(dataSource);}
3、第三个想到的是采用spring单测框架中所提供的@DirtiesContext注解,让每个case启动前都去重新加载一遍spring上下文,这样的话,等于每次都把h2数据库给清空了,似乎这样就可以完美地解决问题,但是根据了解,DirtiesContext注解很吃内存,如果case数量太多,会严重影响执行时间,甚至让工程无法install成功,直接导致CI任务执行失败。所以这个方案也被否了。
4、最后采用的折衷方案是,让每个case在执行前执行建库建表语句,再写所需要的DML语句(注解化),case执行完再把所有表删除。其中的建表删表操作都是由框架负责,对使用者透明。这个方案和系统目前使用的单测框架能够很好结合。
所以得出的一个小经验是,没有最好的技术,只有最合适的技术。
- 单测中隔离每个case对DB数据操作
- 【DB】对数据的操作
- 操作DB~~对数据的增删改查!!sql语句
- 向指定文本框写入数据,对每个WorkSheet操作
- R 语言 数据切片,对每个切片组分别操作
- 对DB操作的一点认识------所有数据计算在SQL中进行
- 操作DB ~~对数据的增删改查!!sql语句 (二)
- 对远程的DB进行操作。
- 多步 OLE DB 操作产生错误。如果可能,请检查每个 OLE DB 状态值
- opencv对每个像素进行操作
- ThinkPHP备份数据( 先在页面列表内显示每个数据表名称,点击操作按钮【备份】对其备份)
- 多步 OLE DB 操作产生错误。如果可能,请检查每个 OLE DB 状态值。没有工作被完成。
- 多步 OLE DB 操作产生错误。如果可能,请检查每个 OLE DB 状态值。没有工作被完成。
- 多步 OLE DB 操作产生错误。如果可能,请检查每个 OLE DB 状态值。没有工作被完成
- 多步 OLE DB 操作产生错误。如果可能,请检查每个 OLE DB 状态值。没有工作被完成
- [未解决]数据库异常:多步 OLE DB 操作产生错误。如果可能,请检查每个 OLE DB 状态值。
- 多步 OLE DB 操作产生错误。如果可能,请检查每个 OLE DB 状态值。没有工作被完成。
- 多步 OLE DB 操作产生错误。如果可能,请检查每个 OLE DB 状态值。没有工作被完成。
- 【SEDA异步框架】【三】异步框架技术选型
- 【SEDA异步框架】【四】异步框架总体设计与实现
- 格式化代码、风格检查、代码漏洞检查以及UT覆盖率检查
- firefox下部分客户机上出现使用flash上传文件,点击上传时就提示会话超时
- rabbitmq学习笔记
- 单测中隔离每个case对DB数据操作
- 听NBA现场讲解很爽,但啥都听不懂?快来学学术语!
- hdu 2022 海选女主角_结构体三级排序
- memcached限制以及与reids的比较
- 【大型网站技术架构笔记】(一)演化过程
- Jenkins进阶系列之——15Maven获取Jenkins的Subversion的版本号
- 使用HttpURLConnection查看图片
- 后缀数组复习小记
- hdoj 3555 Bomb 【数位dp】