`
lighter
  • 浏览: 501030 次
  • 性别: 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后做单元测试。只是这样做,感觉有点...。

相关推荐

    学习java的心得体会 (2).docx

    测试工作应由测试工程师来做,但在你写完一个模块或一个软件时,还是要自己先测试一下,保证不要出现一些低级的错误。 七、善于交流善于沟通 善于交流善于沟通,特别是经常与一些高手交流一下学习的心得体会,找对...

    带教实习护士体会浅谈.doc

    岗前教育包括职业道德教育,强调工作中的严谨态度和提供优质服务的重要性,同时应深入理解医院的规章制度和自己的职责所在。带教老师要确保每位实习护士对医院环境有充分的了解,并帮助他们调整心态,尽快适应护士...

    (工作心得体会)一天的工作心得.docx

    ### 工作心得体会——IT行业经验分享 #### 一、工作日常与心态调整 通过《一天的工作心得》这篇文档,我们可以窥见一位IT行业工作者在日常工作中的所思所感。作者提到,一天的工作虽未带来巨大的收获,但却积累了...

    2021公务员考试心得体会.docx

    我开始通过大量的练习来熟悉各种题型,并尝试从宏观上理解考试的目的,这让我对行政能力测试有了更深的认识。在后期的复习中,我模拟实际考试环境进行练习,这大大提高了我在有限时间内完成所有题目并且保持高准确率...

    初中英语教学心得体会.doc

    经过多年的教学实践,我对于如何有效地进行初中英语教学有了更深的理解和体会。以下,我将结合自己的经验,分享一些重要的教学心得。 首先,活动设计在初中英语教学中占据了核心地位。由于这个年龄段的学生天生好奇...

    七年级语文上册 9 猫的故事同步测试 北师大版 试题.doc

    通过这样的测试,学生不仅能够对所学知识有一个全面的复习,更能提升自己的文学鉴赏能力和语文综合运用能力。 总之,这份同步测试是北师大版七年级上册语文教材中的一个精品,通过字音字形、词汇学习、文学作品理解...

    浅谈Java技术学习方法.pdf

    "浅谈Java技术学习方法.pdf" Java是一种简单易用、完全面向对象、有平台无关性、安全可靠的开发工具。自1995年正式问世以来,Java的快速发展已经让整个Web世界发生了翻天覆地的变化。Java技术和应用发展很快,在...

    物理八年级上教科版第四章第节神奇的眼睛同步测试精选.doc

    首先,让我们从眼睛的基本结构谈起。在同步测试中,将眼睛的工作原理与照相机进行类比是一种常见的教学手段。照相机的镜头相当于人眼中的晶状体,晶状体的调节能力赋予了眼睛适应不同距离观察物体的能力。当晶状体的...

    天津市武清区杨村第四中学2015高中语文 记梁任公先生的一次演讲测试题(含解析)新人教版必修1

    天津市武清区杨村第四中学的2015年高中语文测试题,围绕梁启超的《记梁任公先生的一次演讲》,通过一系列精心设计的问题,引导学生深入理解文本,并通过文章内容延伸到对梁启超这一历史人物的认识,从而实现对语言...

    九年级语文下册第四单元13短文两篇预习测试新人教版202002201116

    对于这两篇短文,学生们在预习时应该思考的核心问题包括:《谈读书》所阐述的读书对个人成长的重要性,以及如何通过阅读来提升自己;在《不求甚解》中,作者是如何理解“不求甚解”这一观念的,并思考如何在自己的...

    2018九年级语文上册第五单元19谈创造性思维习题新人教版20180607328

    2018年九年级语文上册第五单元的习题集,特别以“谈创造性思维”为题,为学生提供了一个深入探讨和实践创造性思维的平台。本单元的习题不仅考察了学生对语文基础知识点的掌握,还特别注重学生思维的灵活性、批判性和...

    部编八年级下册《傅雷家书》中考试题答案 2名著复习.doc

    - 第二段傅雷的主要观点是:艺术的领会不能仅停留于表面的理性认识,需要用心灵去体会,使作品的情感成为自己情感的一部分。 3. **《傅雷家书》的家书作用**: - 家书不仅是讨论艺术的平台,还是激发傅聪思考、...

    九年级语文下册第3单元综合测试题新人教版

    例如,冰心的《谈生命》中对生命哲理的深刻阐释,学生不仅要理解字面含义,更要能够体会其中所蕴含的对生命多样性和复杂性的理解。通过句子品鉴,学生不仅能够提高自己的语言表达能力,还能够培养对美和哲理的感悟。...

    一个电子工程师的经验之谈

    在现代电子设备中,嵌入式系统无处不在,从智能手机到家用电器,都依赖于这些微小而强大的计算平台。熟悉微控制器、操作系统的选择与裁剪、编程语言(如C或C++)以及调试技巧,都是电子工程师需要掌握的重要技能。 ...

    ios开发介绍&心得&项目&相关练习

    作者结合自己的实际经验,谈到了学习编程语言和框架的重要性,以及团队协作和持续学习在iOS开发中的关键作用。这些心得不仅有助于读者更好地理解iOS开发的本质,还能激发读者对开发的热情和动力。 在项目实践部分,...

    甘肃省靖远县第四中学2020学年高一语文下学期期中试题.doc

    本次考试的试卷紧扣现代散文发展的脉络,从“五四”新文化运动谈起,将学生带入了一个由传统向现代转变的文学大潮之中。试卷指出,正是这场运动,不仅解放了文学语言的束缚,更推动了中国散文的现代化进程。在这里,...

    硬件工程师职位必备知识

    通过以上内容的详细介绍,我们可以看出成为一名优秀的硬件工程师需要不断学习新知识、提高自己的技能,并且在实际工作中积累经验。同时,也需要关注行业发展趋势,不断调整自己的发展方向,以适应市场的变化。

    辽宁省辽阳县首山镇第二初级中学2020学年七年级语文11月月考试题(无答案).doc

    学记》中的片段,讨论了“教学相长”的道理,测试学生对文言词汇的理解,如“佳肴”、“是故”、“教学相长”、“困”的意思,以及对文言文句子的翻译,最后要求学生总结文章的中心思想并结合实际谈学习体会。...

    18051234 徐彬 课程个人小结1

    在谈到我国软件行业的现状时,徐彬提出了一个值得深思的问题——软件的安全性和健壮性评估的不足。随着软件应用的普及和深入,软件质量问题已经不再仅仅是技术层面的问题,更关系到企业的数据安全与用户利益。徐彬的...

    浅谈在初中物理教学中培养学生的创新能力.docx

    总结而言,在初中物理教学中培养学生的创新能力是一项系统工程,需要教师从创新性教学活动的设计、创新性教学训练的实施、实验教学的重视和评价方式的创新等多方面着手。通过这些教学策略的实施,不仅能有效提升学生...

Global site tag (gtag.js) - Google Analytics