网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 
中国网管联盟
Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道
 当前位置: > bitsCN.com > JAVA > 新手入门 > 开发工具 > Junit 的使用经验总结  

Junit 的使用经验总结

2007-01-11  作者:bitsCN整理  来源:JavaResearch  点评 投稿 收藏

经验一、不要在测试用例的构造函数中做初始化
当我们需要增加一个测试时,我们要书写一个自己的测试用例,比如sometest。如果你喜欢在sometest的
构造函数中做有关的初始化工作,这可不是个好习惯。如下例:
public class sometest extends testcase{
public sometest(string testname){
super(testname);
//初始化代码
}
}
一旦初始化代码产生异常,比如illegalstateexception,junit随之将产生一个assertionfailederror,
并显示类似下面的出错信息:
junit . framework . assertionfailederror : cannotinstantiatetestcase : test1at
junit . framework . assert . fail ( assert . java : 143 ) at
junit . framework . testsuite$1 . runtest ( testsuite . java : 178 ) at
junit . framework . testcase . runbare ( testcase . java : 129 ) at

网管论坛bbs_bitsCN_com


junit . framework . testresult$1 . protect ( testresult .java : 100 ) at
junit . framework . testresult . runprotected ( testresult. java: 117 ) at
junit . framework . testresult . run ( testresult. java : 103 ) at
junit . framework . testcase . run( testcase . java: 120 ) at
junit . framework . testsuite . run( testsuite . java , compiledcode ) at
junit . ui . testrunner$12 . run (testrunner. java : 429 )
这一大堆出错信息只会让人一头雾水,我们只知道junit无法实例化某个测试用例,到底出了什么问题,在
哪儿出错了呢?不知道!
那么好的做法是怎样呢?
答案是重载测试用例的setup()方法进行初始化。当setup()中的初始化代码产生异常时我们得到的 网管联盟bitsCN@com
是类似下面的出错信息:
java . lang . illegalstateexception : oopsatbp . dtc . setup ( dtc .java: 34 ) at
junit . framework  . testcase . runbare ( testcase .java: 127 ) at
junit . framework  . testresult$ 1 . protect(testresult . java : 100 ) at
junit . framework  . testresult . runprotected ( testresult . java: 117 ) at
junit . framework  . testresult . run ( testresult .java : 103 )
...
显然这要清楚得多我们一下子就可以知道是在dtc.java 的第34 行产生了illegalstateexception

经验二、不要假定测试用例中测试的执行次序
我们知道在一个junit 的测试用例类中可以包含多个测试,每个测试其实就是一个method。在下面的例子
中有两个不同的测试,尽管testdothisfirst()在位置上先于testdothissecond(),但我们不能就此假定
中国网管论坛bbs.bitsCN.com

testdothisfirst()会先执行。
public class sometestcase extends testcase{
public sometestcase(string testname){
super(testname);
}
public void testdothisfirst(){
...
}
public void testdothissecond(){
}
}
由于junit 内部使用一个vector 来存储所有的test,因此在不同的操作系统和java 虚拟机上,test 的执行
次序是不可预测的。
好的习惯是保持测试之间的独立性,使得它们在任何次序下执行的结果都是相同的。如果真得需要某些测试
按照特定的次序执行,我们可以借助addtest 来实现。如下例:
public static testsuite(){
suite.addtest(new sometestcase(“testdothisfirst”;));
suite.addtest(new sometestcase(“testdothissecond”;));
return suite;
}
这样我们可以确保junit先执行testdothisfirst(),然后执行testdothissecond()。

经验三、测试要避免人工干预
如果某段测试代码需要人工干预,那至少有两个不良后果:一则不能被包括在自动测试中,比如夜间的回
归测试;二则不能被重复执行,例如数据删除的测试不能做完删除就万事大吉,比较好的做法是自动补上 网管联盟bitsCN@com
删除掉的数据。经验二讲的是不同的测试要避免相关性,而经验三讲的其实就是测试要避免自相关。
经验四、在子类中调用父类的setup() 和teardown()让我们看一看下面的代码
public class sometestcase extends anothertestcase {
// a connection to a database
private database thedatabase;
public sometestcase (string testname) {
super (testname);
}
public void testfeaturex () {
...
}
public void setup () {
// clear out the database
thedatabase.clear ();
}
}
你发现其中的错误了吗?setup()应该调用super.setup() 以确保anothertestcase 中定义的父类的环境被初
始化了。当然这也有例外,就是基类可以处理任意的测试数据。

网管网www.bitscn.com


上一页12 下一页
TAGs   总结   经验   使用   测试   代码   我们   可以   数据   执行   at   面的      
 上一篇:Java规则引擎-Drools   下一篇:用maven制作Java项目发行包
相关文章列表
Junit 的使用经验总结 评论:
loading.. 评论加载中…
评论:请自觉遵守互联网相关政策法规,评论不得超过250字。

验证码: 注册用户
本类热门排行:
1.Java从入门到精通之工具篇
2.花二十分钟教你Ruby快速入门
3.深入WebLogic Portal UI编程
4.开发技术:KETTLE JAVA API&nb
5.轻松搞定Java内存泄漏
6.Gel:号称世界上最轻巧的Java IDE
7.Java 工具完全安装手册
8.Junit 的使用经验总结
9.FCKeditor在线编辑器的使用
10.CheckStyle 及其配置的详细解释
最新推荐文章:
1.Eclipse开发经典教程:SWT布局
2.使用java开发facebook网站应用程序
3.使用JasperReport与iBATIS开发Web报表
4.基于web的java应用开发的备用工具
5.如何使用JMeter测试Java项目
6.JRuby 1.0发布:实现JVM对Ruby的兼容
7.认识p-unit:一款开源的性能测试工具
8.JavaFX应用程序制作工具JFXBuilder
9.Eclipse Template与模式
10.Java新手看招 常用开发工具介绍
网管论坛交流:
·不疯魔不成活
·令你大开眼界的真正标准化机房,已整理重
·华为HCSE OSPF路由协议培训教材 V3.0
·为赈灾,女孩舍身拍“裸照”
·Windows Server 2003服务器群集创建和配
·exchange2k3全套官方资料
·双儿一周岁了。。。特殊的礼物来啦。。
·存储备份技术版块守则
·无盘技术交流区守则
·DOS命令基础大全之命令详解<作者吐血