该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2012-04-12
上周在东京买了,Spring 3.x企业应用开发实战 很好!不过有些错别字,哈
![]() |
|
返回顶楼 | |
发表时间:2012-04-12
dao测试确实不容易,dbunit虽然解决了一些问题,但还是不太方便,期待有更好的idea出现
|
|
返回顶楼 | |
发表时间:2012-04-13
qinshiwang 写道 上周在东京买了,Spring 3.x企业应用开发实战 很好!不过有些错别字,哈
![]() 不好意思 ![]() |
|
返回顶楼 | |
发表时间:2012-04-13
最后修改:2012-04-13
在做DAO测试的时候,有一个问题不得不面对,那就是使用数据库的方式。
以oracle为例,多人开发时,如果大家都使用一个测试数据库实例。跑测试的时候,会导致数据之间的相互污染,比如表之间的关联关系,容易错乱。 如果每个人都用自己的数据库实例,比如使用H2之类替代oracle。基础数据准备工作又是一个很大的工作量,还有就是H2之类的与oracle真实环境毕竟有些差距。 请教楼主,在真正实践的时候,该如何解决这方面的问题? |
|
返回顶楼 | |
发表时间:2012-04-13
nighthawk 写道 在做DAO测试的时候,有一个问题不得不面对,那就是使用数据库的方式。
以oracle为例,多人开发时,如果大家都使用一个测试数据库实例。跑测试的时候,会导致数据之间的相互污染,比如表之间的关联关系,容易错乱。 如果每个人都用自己的数据库实例,比如使用H2之类替代oracle。基础数据准备工作又是一个很大的工作量,还有就是H2之类的与oracle真实环境毕竟有些差距。 请教楼主,在真正实践的时候,该如何解决这方面的问题? 1、采用数据前缀(这个写测试时就要注意),并通过random方式生成随机但不冲突的数据 2、采用数据库沙箱 即每个人一个数据库(这种方式可能在公用测试机不太可能) ---数据库的建立 通过执行脚本完成。 |
|
返回顶楼 | |
发表时间:2012-04-13
最后修改:2012-04-13
nighthawk 写道 在做DAO测试的时候,有一个问题不得不面对,那就是使用数据库的方式。
以oracle为例,多人开发时,如果大家都使用一个测试数据库实例。跑测试的时候,会导致数据之间的相互污染,比如表之间的关联关系,容易错乱。 如果每个人都用自己的数据库实例,比如使用H2之类替代oracle。基础数据准备工作又是一个很大的工作量,还有就是H2之类的与oracle真实环境毕竟有些差距。 请教楼主,在真正实践的时候,该如何解决这方面的问题? 我的经验是:一定要做到团队中工作环境的标准化和独立化,切忌采用公用的数据库做测试,避免冲突。标准化,意味减少沟通成本,这也是Maven所极力提倡的。所谓标准化,是即团队成员的工作目录,安装的程序都做到一样,如果公司层面有这种标准化的内容当然最好,如果没有项目组也可以自己定义。 独立化,就是开发机的环境不要依赖于外部的,也即要完备,如数据库,memcached等都要有,当然可以模拟的就不要安装真实的了。做过国外外包项目的朋友都会知道,一个外包项目的开发环境包含了所有需要的东西,以虚拟机文件的方式提供,打开什么都有了,用VMWare打开即可开发。 简而言之,项目组每个开发者的工作机环境做到一致,包括目录结构,相关软件及版本。 剩下来的问题是:代码同步通过SVN或GIT等版本控制工具完成,但如何保证开发机的数据库的同步性呢?其实unitils整合了dbmaintain框架专门干这个活,它可以在单元测试前执行数据库变更脚本,同步本地的数据库结构。 也就是说,数据库一旦创建后,其后所有针对数据库的更改都必须脚本化,这样各开发终端下载数据库更改脚本,unitils的dbmaintain模块执行脚本以同步化本地数据库。可以通过http://www.dbmaintain.org/tutorial.html详细了解。 以下是我真实项目中的数据库变更脚本的结构: ![]() 由于我的项目采用数据库分库,每个库的变更脚本分开存放,如zhk,com等。我要求每个开发者对数据库的变更都必须写日志,以天为单元更新,写在根目录下的dbChangelog.txt,然后根据这个日常编写变更脚本及同步PowerDesigner的设计文档。 |
|
返回顶楼 | |
发表时间:2012-04-13
stamen 写道 qinshiwang 写道 上周在东京买了,Spring 3.x企业应用开发实战 很好!不过有些错别字,哈
![]() 不好意思 ![]() 都是输入法惹得祸 ![]() |
|
返回顶楼 | |
发表时间:2012-04-13
jinnianshilongnian 写道 stamen 写道 qinshiwang 写道 上周在东京买了,Spring 3.x企业应用开发实战 很好!不过有些错别字,哈
![]() 不好意思 ![]() 都是输入法惹得祸 ![]() 呵呵,我用五笔,所以会错得更离谱些 ![]() |
|
返回顶楼 | |
发表时间:2012-04-13
stamen 写道 nighthawk 写道 在做DAO测试的时候,有一个问题不得不面对,那就是使用数据库的方式。
以oracle为例,多人开发时,如果大家都使用一个测试数据库实例。跑测试的时候,会导致数据之间的相互污染,比如表之间的关联关系,容易错乱。 如果每个人都用自己的数据库实例,比如使用H2之类替代oracle。基础数据准备工作又是一个很大的工作量,还有就是H2之类的与oracle真实环境毕竟有些差距。 请教楼主,在真正实践的时候,该如何解决这方面的问题? 我的经验是:一定要做到团队中工作环境的标准化和独立化,切忌采用公用的数据库做测试,避免冲突。标准化,意味减少沟通成本,这也是Maven所极力提倡的。所谓标准化,是即团队成员的工作目录,安装的程序都做到一样,如果公司层面有这种标准化的内容当然最好,如果没有项目组也可以自己定义。 独立化,就是开发机的环境不要依赖于外部的,也即要完备,如数据库,memcached等都要有,当然可以模拟的就不要安装真实的了。做过国外外包项目的朋友都会知道,一个外包项目的开发环境包含了所有需要的东西,以虚拟机文件的方式提供,打开什么都有了,用VMWare打开即可开发。 简而言之,项目组每个开发者的工作机环境做到一致,包括目录结构,相关软件及版本。 剩下来的问题是:代码同步通过SVN或GIT等版本控制工具完成,但如何保证开发机的数据库的同步性呢?其实unitils整合了dbmaintain框架专门干这个活,它可以在单元测试前执行数据库变更脚本,同步本地的数据库结构。 也就是说,数据库一旦创建后,其后所有针对数据库的更改都必须脚本化,这样各开发终端下载数据库更改脚本,unitils的dbmaintain模块执行脚本以同步化本地数据库。可以通过http://www.dbmaintain.org/tutorial.html详细了解。 以下是我真实项目中的数据库变更脚本的结构: ![]() 由于我的项目采用数据库分库,每个库的变更脚本分开存放,如zhk,com等。我要求每个开发者对数据库的变更都必须写日志,以天为单元更新,写在根目录下的dbChangelog.txt,然后根据这个日常编写变更脚本及同步PowerDesigner的设计文档。 非常感谢楼主的认真回复,受益匪浅,这就去看看dbmaintain。 |
|
返回顶楼 | |
发表时间:2012-04-13
支持一下楼主,很少看到厦门的朋友这么给力...
|
|
返回顶楼 | |