锁定老帖子 主题:4层结构的单元测试构架
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-01-15
通常我们的bs模式应同都是5层构架体系的:DAO BL Action Taglib JSP 这篇文章主要将针对除去jsp以外的另外4层相关单元测试的基本框架进行了一些讨论: 下面我将对每一层的目的是什么,单元测试的目的是什么,还有改层单元测试的相关问题进行讲述 1、DAO层 从上面我们可以看出,DAO的test主要是针对DAO的3种操作进行测试 这里,现在一般DAO层我们都会使用Spring+hibernate来进行构建,那么一个DAO的实例就需要引入到spring和DAO的相关配置了。而且由于牵扯到外部环境,所以这里外部环境的处理可以采用两种方式,一种是直接使用数据库,这里就需要有一个真实的数据源存在了 二是模拟一个数据源,比如使用内存数据库或者文本数据库来建立一个模拟环境,方便单机进行测试 而且由于DAO是由Spring来进行管理的,所以在测试的时候需要加载Spring的上下文来获取dao的bean,关于spring的加载我使用的是spring-mock,它的好处是在事物处理后可以对相关的数据库操作进行rollback 2、BL层 所以针对于这些功能我们可以把原本属于BL的代码归还给BL了,然后针对于bl的几个功能就可以清晰地编写单元测试了,这时候一般会用到做单元测试时比较有用的一个副产品:重构。而这个副产品的价值将会在你重构后体现出来,DAO,BL,ACTION,taglib的代码职责更加明晰了,该做什么判断的就座什么判断 BL这层一般也是用Spring来进行管理的,所以我们还是需要加载spring的上下文,当然也可以不加载Spring,然后根据接口模拟一个DAO出来,但是我一般觉得这种模拟花消比较大,这个代价是否值得一直是我所怀疑的 3、Action层 针对于上述功能action的单元测试基本框架是:封装请求参数,发送请求,判断所需的页面bean和跳转的结果页面是否正确 当然一般在action中会用到Spring的上下文获取bl,由于之前已经对bl进行了测试确认,所以我建议可以直接使用实际的bl,而不是再花费代价开发一个模拟的BL 4、taglib层 相对来说获取参数,调用BL对参数进行执行,把得到的页面代码输出,比较固定,测试的意义不大,所以主要测试的就是把执行结果放到指定样式中这个功能。这个功能通常就是给一个结果集参数然后组合返回一个StringBuffer,所以测试起来也比较容易 但是taglib在使用的时候也需要的Spring甚至Struts的配置,这就需要在初始化的时候把相关环境也要加载进来 这里大家因该可以看出我的单元测试并不是完全独立的,而是伴随渐进的按照DAO,BL,Action,taglib这样的顺序引入环境,这样一个可以减少测试开发的代价,一个是可以增加测试的准确性 下一篇文章中我会针对各个层的具体测试方法是用代码进行讲解 :)
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-01-18
建议楼主把测试环境和持续集成环境讲一下
|
|
返回顶楼 | |
发表时间:2007-01-29
楼主分层的依据是什么??为什么把taglib和jsp分开?action又属于什么层?
楼主有把层的概念和所用技术绑定的嫌疑 |
|
返回顶楼 | |
发表时间:2007-01-30
引用 我个人觉得单元测试的目的就是为了能够用轻易的重复对代码的测试! 这话怎么读? |
|
返回顶楼 | |
发表时间:2007-02-07
引用 eyejava 2007-01-30 09:53 引用 我个人觉得单元测试的目的就是为了能够用轻易的重复对代码的测试! 这话怎么读? 其实就是自动化测试,因为人工测试要重复代价较高 |
|
返回顶楼 | |
发表时间:2007-02-07
引用 basicbest 2007-01-29 22:00
楼主分层的依据是什么??为什么把taglib和jsp分开?action又属于什么层? 楼主有把层的概念和所用技术绑定的嫌疑 呵呵,我主要是针对我代码的层次结构,具体来说就是包的结构我通常一个应用的包路径是 root.action root.dao root.manager root.taglib 然后jsp代码又在docroot下面,所以这里的层次不是通常意义上MVC的层次。 |
|
返回顶楼 | |
发表时间:2007-03-19
rocket 写道 引用 basicbest 2007-01-29 22:00
楼主分层的依据是什么??为什么把taglib和jsp分开?action又属于什么层? 楼主有把层的概念和所用技术绑定的嫌疑 呵呵,我主要是针对我代码的层次结构,具体来说就是包的结构我通常一个应用的包路径是 root.action root.dao root.manager root.taglib 然后jsp代码又在docroot下面,所以这里的层次不是通常意义上MVC的层次。 |
|
返回顶楼 | |
发表时间:2007-03-19
单元测试干吗要分层。
|
|
返回顶楼 | |
发表时间:2007-03-19
yiding_he 写道 单元测试干吗要分层。
因为被测组件是分层的,而且各层组件的测试策略不同 建议楼上的换个头像 |
|
返回顶楼 | |
发表时间:2007-03-19
我的意思是说:在单元测试面前,有“层”的概念吗?
|
|
返回顶楼 | |