`
lighter
  • 浏览: 495543 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

从自身体会谈一谈测试

阅读更多
论坛上关于测试的帖子很多,而且有一部分是一些大牛写的,看得也比较有感触.在这一个帖子里面主要谈一下,自己关于测试的一些理解.

还是从我目前所处项目组的情况说起吧,整个项目开发的架构是从DAO层-BS层-BIZ层-Action展现层,典型的J2EE分层的结构,从名字中就可以看得出DAO层是只对数据库进行操作的,BS层主要处理大量的业务方法,而BIZ层是干什么用的呢?其实BIZ主要是负责事务管理和用户的权限控制的;另外,Action当然是表示层的东西啦,搞java开发的地球人都听说过这一个称谓。在这里,并不想评论公司开发的架构的思想怎样怎样,毕竟论坛里面已讨论了N次,在这里只是想把自身对单元测试的一些体会写出来。开发的时候主要用到的技术情况主要有JSF/WebWork+hibernate+spring,前台方面还大量用了Ext和DWR两个东东。

就目前的项目里20多人,真正愿意写单元测试的其实并不多,大多是怕写测试代码影响了他自己的开发速度,其实这根本是一个伪命题。写代码以及测试的代码相对整个开发流程而言,并不多,相反比较的是你想好怎样去实现这一个功能,还有实现该功能后针对的调整维护会占用比较大的时间.

就目前我对于自己开发的模块,是这样写测试代码的:
对于所有的util公共方法,我基本上都用JUnit来测试。从自身体会来讲,用JUnit来测试一些输出输入很简单,但里面算法处理比较复杂的时候,更显得其测试特别特别有用,这一点感触最深。说到测试,就不能不提一下重构。从我自身体会觉得,如果一个程序员自己没有真正地写过一些的JUnit测试,就对"有效的测试给了重构更多的信心"类似于这样的言语说理解很深刻的话,我根本就不信,根本就是从书上学来的放出来的屁话。我自身是从尝试写JUnit测试到现在变得非常自然地写JUnit测试,因为这样做给了我更大的信心,心里就知道了"哦,这和我想要的一样啦,我可以往下面走了"。顺便八卦一下,半年多来,感觉对自己的开发影响比较大的两本书是<<agile java>>和<<重构>>。

对于很多的DAO方法,我都是这样做的:
利用构建好的一个Hibernate的Flush方法的Interceptor拦截器,实现了里面的public Object invoke(MethodInvocation invocation) throws Throwable方法后,再构建一个BaseDAOTest来继承于spring的AbstractTransactionalDataSourceSpringContextTests测试类来对大部分的DAO方法进行测试.具体不知道怎样做的朋友,可以搜索一下论坛,有大把这样的例子.

对于大部分的BS和BIZ层方法,是利用EasyMock测试驱动写的。在我们的这样的项目组里面的,因为分层多,每一个层次的职责很明确,每一层都是用接口隔离开的,所以这样对EasyMock这样的Mock框架就大有用途了。可惜的是,只能用EasyMock1.2的包,因为我们开的的环境只能用1.4的java SDk。如果可以用EasyMock2.x版本上的时候,测试的代码量就会少一些,但需要JDK 1.5以上的版本啊。没有试过JMock,不知道好不好用。

说到Action层方面,我有一个疑问,想请教一下大家。目前我们项目里面有两个专门进行验收测试的人员,也就是每天对每一个页面的一些细节功能都进行测试,有BUG的话会记录在JIRA或其他的缺陷管理工具上面。现在Action层我们是用JSF,大多情况下是调用BIZ层的接口进行一个数据的展现和编辑,而且很多方法都和EXT,DWR都有一些交互动作。在这种情况下,如果我还是用Mock的情况下,感觉就显得有测试比较脆弱---毕竟项目里面有两个专门进行验收测试的人员,每天都会进行一些回归测试。 所以我想问一下,对于这种情况的Action怎样测试才比较好,才能达到比较好的效果或者就采用目前的形式---根本就没有针对Action这一层写测试?
分享到:
评论
16 楼 cqtzj 2008-09-14  
跟牛人学学,专业性太强了.
15 楼 chc 2008-09-06  
期待有人详细的描述web应用的测试,最好能举例
14 楼 xly_971223 2008-01-24  
我就不怎么喜欢写测试 尤其是简单的东东
做web开发 需要测试的代码并不多
13 楼 xyz20003 2008-01-23  
dbunit用起来超级不爽,它都不会自己管理数据依赖性,导出的数据根本用不了,然后还要自己去调,现在干脆写成sql,用dbdeployer管理sql版本,还在试验中。
12 楼 sg552 2008-01-23  
回楼上的:
觉得测试速度慢,貌似可以设置AbstractxxxTest的一个加载缓存的xml文件属性,你可以查下API。

回楼主的:
测试ACTION,可以使用spring-mock.jar 中的MockHttpServletxxx. 很好用。
11 楼 lighter 2008-01-22  
抛出异常的爱 写道
我是指内存数据库hsqldb
每次起来后...都是空的表
在setup中把要插入的数据insert进去
在tearDown中把插入的数据del进去.

AbstractTransactionalDataSourceSpringContextTest
这东西是不喜欢用的...1是慢,2是对数据库要求同步3.数据要事先作好放到库里才好.

嗯,个人对AbstractTransactionalDataSourceSpringContextTest感觉有点不爽快的地方.
1、相对而言,测试的速度是比较慢
2、假如我们要假如一个C表的某些操作的话,而C表又依赖B表,而B表又依赖A表,这一个时候就很可能要
deleteFromTables(new String[]{"A","B","C"});,然后建立至少一条A表的数据和一条B表的数据和至少一条C表的数据才能测试测试正确,但也保整了数据的完整性。

好处是:比较真实地测试了你DAO层的代码对数据库的一些操作,所以一直在用,感觉也挺方便的;
没有试过hsqldb来进行测试,不知道效果怎样
10 楼 抛出异常的爱 2008-01-22  
我是指内存数据库hsqldb
每次起来后...都是空的表
在setup中把要插入的数据insert进去
在tearDown中把插入的数据del进去.

AbstractTransactionalDataSourceSpringContextTest
这东西是不喜欢用的...1是慢,2是对数据库要求同步3.数据要事先作好放到库里才好.

有时要把session的conn放出来运行desc t_xxxx
得到他有哪些字段才好写测试....很崩馈
如果可能的话自己写建表语句的话
就没这么多问题了.
9 楼 daquan198163 2008-01-22  
不用在tearDown删去刚插入的数据,Spring的那个测试基类AbstractTransactionalDataSourceSpringContextTests(我见过的名字最长的类)可以在每个测试结束后替我们回滚事务

ps:对表结构查询?建表?什么意思
8 楼 抛出异常的爱 2008-01-22  
你忘记说在tearDown删去刚刚插入的数据了.
PS:如何才能用hibernate方便的对表结构查询呢?
(如果建表就更好了)
我用hsqldb想要建表都要写多个hbm.xml
7 楼 daquan198163 2008-01-22  
zdonking 写道
这样也会引起其他的麻烦。比如如何做到数据无关性,dbunit之类的吗?维护那么一份测试数据也够恶心的。(曾经造数据造的想吐)
但如果dao的粒度比较细。造数据就不用考虑太多的数据关联性,甚至可以不用dbunit之类的辅助工具。
ps:web层不包含业务逻辑的话,测试的意义应该不大吧。或许一些公共的action需要做一些正常转向,异常转向等的测试吧。

数据无关性?你的意思是说测试数据互相干扰的问题吧?这个问题Spring的那个测试基类可以解决,每个测试结束它替我们回滚事务。
造数据我不用dbunit,因为还要额外维护数据文件,我一般在setup里面用dao往数据库插数据,现学现卖

ps:web层也有自己的逻辑,比如validator、参数处理、视图转发,还有view里的显示逻辑,都需要测试,selenium擅长做这些
6 楼 lighter 2008-01-22  
daquan198163 写道
你们分的层太多了,不够pragmatic
另外,如果不涉及到对外通信、远程调用的话,用mock隔离测试的意义不大,还不如做集成测试
比如对action的测试,可以如楼上说的那样——用selenium IDE在ff上面录制脚本,copy到junit里面来跑,这个虽然也是用junit来写,但称呼上应该称为FunctionTest加以区别。好处就是连验收测试的回归都可以自动化了
参考SpringSide

有一小部分内容涉及了远程调用,不过不多。
"用selenium IDE在ff上面录制脚本,copy到junit里面来跑",其实比较早就听说这一个东西,但一直没有去尝试。今晚空闲的时候再下载一个新的springside来看一下。分层我们一般都至少四层,写一个普通的CRUD我都快麻木了,没有办法,这一个框架是银行的人里面给定用的,你只能按着规范来写!
5 楼 zdonking 2008-01-22  
这样也会引起其他的麻烦。比如如何做到数据无关性,dbunit之类的吗?维护那么一份测试数据也够恶心的。(曾经造数据造的想吐)
但如果dao的粒度比较细。造数据就不用考虑太多的数据关联性,甚至可以不用dbunit之类的辅助工具。
ps:web层不包含业务逻辑的话,测试的意义应该不大吧。或许一些公共的action需要做一些正常转向,异常转向等的测试吧。
4 楼 daquan198163 2008-01-22  
zdonking 写道
正在郁闷dao和业务逻辑层耦合在一起如何test的人飘过。
ps:或许对一个业务逻辑类中dao部分可以用AbstractTransactionalDataSourceSpringContextTests,业务逻辑部分直接mock后做单元测试。只是这样做,感觉有点...。

这样太麻烦了,只测业务逻辑类就行(用AbstractTransactionalDataSourceSpringContextTests),dao自然就被覆盖到了
3 楼 daquan198163 2008-01-22  
你们分的层太多了,不够pragmatic
另外,如果不涉及到对外通信、远程调用的话,用mock隔离测试的意义不大,还不如做集成测试
比如对action的测试,可以如楼上说的那样——用selenium IDE在ff上面录制脚本,copy到junit里面来跑,这个虽然也是用junit来写,但称呼上应该称为FunctionTest加以区别。好处就是连验收测试的回归都可以自动化了
参考SpringSide
2 楼 抛出异常的爱 2008-01-22  
action
如果没有逻辑多好啊....
一般是用selenium IDE在ff上面.
把测试顺序录下来测试.
1 楼 zdonking 2008-01-22  
正在郁闷dao和业务逻辑层耦合在一起如何test的人飘过。
ps:或许对一个业务逻辑类中dao部分可以用AbstractTransactionalDataSourceSpringContextTests,业务逻辑部分直接mock后做单元测试。只是这样做,感觉有点...。

相关推荐

    软件测试面试突击-为自己赢得一份测试工程师职位

    软件测试面试突击-为自己赢得一份测试工程师职位

    软件测试人员的独特价值体会

    自己从2006年毕业后就直接进入测试这个行业,在这三年多的时间里,自己对这个行业认识经历了三个阶段,也对测试人员的价值有了自己的认识

    软件项目测试管理经验谈

    从软件测试员的自身素质培养到浅谈测试技巧等方面讲解测试管理

    软件测试经典面试题 (超实用)

    10、在即将完成这次笔试前,您是否愿意谈一些自己在以往的学习和工作中获得的工作经验和心得体会?(可以包括软件测试、过程改进、软件开发或者与此无关的其他方面) 35 11、为什么选择测试这行? 35 12、你的工作...

    10、结合自身经历谈的一点基金申请体会.docx

    10、结合自身经历谈的一点基金申请体会.docx

    软件测试网络文章集合

    作为一个测试人员尤其感觉到这一点,并且深深体会到了我们工作的重要性。应有一个良好的工作计划,对测试用例及测试的数据要有做良好规划,使测试有章可循,我认为软件测试就是在受控制的条件下对系 统或应用程序...

    测试人员面试题(为什么要在一个团队中开展软件测试工作?)等

    在测试的过程发现软件中存在的问题,及时让开发人员得知并修改问题,在即将发布时,从测试报告中得出软件的质量情况。 02. 您在以往的测试工作中都曾经具体从事过哪些工作?其中最擅长哪部分工作?  我曾经做过web...

    软件测试之魂:核心测试设计精解

    最后,作者以追逐软测之理念进行延展,旨在帮助读者理解并站在测试工作之上看测试,如何超越自我进行测试创新,为走出一条属于自己的测试精华之路提供指引。 《软件测试之魂:核心测试设计精解(第2版)》是作者从事...

    编写软件测试用例方法心得体会!

    软件测试编写背景:一直以来都不太想把技术方面的文章写出来给大家看,一个是怕写作功底不好误导哪些刚入门的测试同行,自己的表达能力有限,另一方面怕有的同行拿出去炒作,再者测试网站论坛上关于测试用例的资料...

    (已更新)实用的智力测试智商提升微信小程序源码下载支持多种流量主

    这是一个考验智力,心里上面的一个测试游戏 支持多种测试方法比如有: 智商测试丨情商测试 性格测试丨爱情测试 抑郁症测试丨焦虑症测试 心理压力测试丨生活满意度测试 通过不同的测试,来检查你的智力,情商等等 通过...

    编写测试用例

     一直以来都不太想把技术方面的文章写出来给大家看,一个是怕写作功底不好误导哪些刚入门的测试同行,自己的表达能力有限,另一方面怕有的同行拿出去炒作,再者测试网站论坛上关于测试用例的资料已经实在是多。...

    智力测试情商测试提升智力小程序源码

    这是一个考验智力,心里上面的一个测试游戏 支持多种测试方法比如有: 智商测试丨情商测试 性格测试丨爱情测试 抑郁症测试丨焦虑症测试 心理压力测试丨生活满意度测试 通过不同的测试,来检查你的智力,情商等等 通过...

    我在软件测试中编写测试用例方法心得的一些体会!

    一个是怕写作功底不好误导哪些刚入门的测试同行,自己的表达能力有限,另一方面怕有的同行拿出去炒作,再者测试网站论坛上关于测试用例的我在软件测试中编写测试用例方法心得的一些体会!编写背景: 我一直以来都不...

    网络测试之二(VB6.0源代码编写)网络测试可以测试自己的网络通不通

    网络测试之二(VB6.0源代码编写)网络测试可以测试自己的网络通不通

    软件测试经验与教训

    本书汇总了293条来自软件测试界顶尖专家的经验与建议,阐述了如何做好测试工作、如何管理测试,以及如何澄清有关软件测试的常见误解,读者可直接将这些建议用于自己的测试项目工作中。这些经验中的每一条都是与软件...

    软件测试中编写测试用例方法心得体会

    心得体会论坛软件测试中编写测试用例方法心得体会编写背景:一直以来都不太想把技术方面的文章写出来给大家看,一个是怕写作功底不好误导哪些刚入门的测试同行,自己的表达能力有限,另一方面怕有的同行拿出去炒作,...

    浅谈云上渗透测试方法.pdf

    演讲者Mickey现就职于某大型国际网络公司,多年负责和云相关的业务,所以对云上的一系列安全问题有着自己的独特深刻见解,对可能对云服务产生威胁的人为和非人为因素有着自己的总结。这也许能让你测试如今以云为主的...

    NextDate函数白盒测试

    NextDate函数白盒测试 自己写的 软件测试白盒文档

    keras-yolov3 进行批量测试 并 保存测试结果

    几个月前自己上手YOLOV3-keras,自己训练了一个数据集。在测试的时候,发现源码作者的测试不好用。自己稍稍修改了一下。 几点改进 (1)批量测试图片 将待测试的图片放入 './test'路径下。 测试的时候,第一张图片...

Global site tag (gtag.js) - Google Analytics