[调查]大家在开发过程中一直进行单元测试工作么?

Patrick_DK 2003-02-13 10:46:44
例如JUnit,想知道大家对单元测试的看法和利用/使用情况
...全文
45 41 打赏 收藏 转发到动态 举报
写回复
用AI写文章
41 条回复
切换为时间正序
请发表友善的回复…
发表回复
hanty 2003-03-13
  • 打赏
  • 举报
回复
目前代码需要进行
1、代码自测
2、交叉检视
3、代码复测
4、提交测试

shidu 2003-03-10
  • 打赏
  • 举报
回复
学习。
coast1982 2003-03-07
  • 打赏
  • 举报
回复
哈哈!!

太深奥了! 小弟听不动! 不知有没有更形象得例子呀!

谢谢啦!!

javashit 2003-03-06
  • 打赏
  • 举报
回复
不好意思,高手门都知道了
也要给菜鸟介绍一下呀
呵呵
javashit 2003-03-06
  • 打赏
  • 举报
回复
JUnit就是对程序代码进行单元测试的一种Java框架。通过每次修改程序之后测试代码,程序员就可以保证代码的的少量变动不会破坏整个系统。要不是有Junit这样的自动化测试工具,代码的的反复测试简直会把人累死而且还可能不准确。现在好了,测试过程可以频繁进行而且还是自动的,所以你可以令程序错误降低到最少。
不过,创建测试案例可也不是个简单的过程,当事人得清楚地知道代码的有关情况及其运做机理。你必须小心创建Junit执行的单元测试,保证测试能像在真实环境下运行那样严格地检查代码。本文首先讨论如何创建单元测试,然后阐述各个测试部分如何组合起来。

创建测试案例

Junit的测试案例由扩展Junit框架的Java类编写。这些类拥有大量的方法,每一种方法测试特定的功能或者说代码单元(unit)。比方说,对简单财务管理软件来说,测试就可能包括用户名和密码的登录过程。其次则可能要检查存款余额、保证资产节余的正确性。第3个测试可能涉及到模拟从帐户中取钱的过程。通常,你编写的测试案例越多,测试的完整性也就最好。你应当测试产品的全部功能领域:只有这样做才能保证系统的局部变动不至于影响到系统的其他部分。

创建新的测试案例很容易。正如你在清单A中看到的那样,编写新的测试案例需要创建新的Java类。新类必须扩展TestCase类,同时包含一个构造器调用基类的构造器。

新类叫做test harness,这就是你编写自己测试程序的场所。每次调用测试的时候,Junit就会执行setUp()方法初始化你需要的任何值。接着,它会调用一个测试案例然后再调用tearDown() 取消初始化并进到下一个测试。

这个简单的测试工作由两个测试组成,testBooleanTrue()和testBooleanFalse()。每一个测试都必须公开声明而且必须调用Junit通知测试状态。在这种情况下,我们令某一个测试总是成功而另一个则总是失败。


示例

现在就让我们详细地讨论一个测试案例。在我们的例子里,我们将对Xerces XML解析器进行测试,该解析器可以从Apache XML项目免费获取。我们还测试一个简单的XML文档,如清单B所示。

我们的测试案例如清单C所示。

XMLTest.java测试案例包含两个测试。第1个是testPersonCount(),它查看XML文档中列出的人员数是否在0和10之间。如果是测试案例就给assertTrue()方法返回true,测试就算成功了。可是,如果项目太少或者太多那么测试就会失败。另一个测试保证人员“James Scheinblum”也包含在文件之内。我们通过编辑Example.xml文档的方式尝试了这两个测试。

测试案例采用了setUp() 和 tearDown() 方法来保证每一次测试都会重载XML文档。假如扔出了异常,比如混乱的XML文档或者不能打开文档阅读等等,测试会调用失败的方法,经过它告诉Junit测试失败,而失败结果则被传递给assertTrue()。两种不同的断言都在JavaDocs for Junit中文档化了,详细内容请看这里。

既然已经创建了我们自己的测试,接下来就该运行测试了。为此还得首先创建一个测试包。


创建测试包

所谓测试包(test suite)其实就是同一会话中应当执行的测试集合。测试包把测试组织在一起执行,而不论测试是否在同一文件里。清单D显示我们的测试包其实就是清单C中的那两个测试。在执行这些测试的时候我们要用到下一节中介绍的方法定义。


运行哪个测试?

在我们的测试包里我们明确定义了要运行的测试。那就是说当我们编写更多测试的时候需要把它们加到测试包里来。显式定义要运行的测试就等于定义了它们运行的次序。

当然,你也可以用reflection自动地发现测试案例。这意味着你只需要针对每次测试执行编写一次测试包,它动态地确定哪些测试可用并且运行这些测试。但其缺点却是你无法排斥测试的运行,而且你无法控制测试被执行的顺序。不过,由于没有向测试包中加入测试案例,所以reflection确实能保证你在创建测试案例的过程中没有遗留任何一步。

清单E 显示如何把类的名字传递给测试包构造器来自动装载测试。

现在我们就拿这个测试包进行测试。


运行Junit测试

执行测试需要创建可执行类来调用Junit测试运行器。运行器(runner)负责执行测试包,运行所有的测试并输出测试结果。清单F显示如何把测试包集成到测试运行器中。

正如你所看到的那样,测试运行器并不关心测试包是否明确定义了要运行的测试案例或者测试包是否采用了reflection来确定测试的名称。

如果一切OK,Junit就象清单G那样输出结果。但是要出了什么问题的话输出的结果就可能如清单H那样。

用Junit创建测试案例很简单,而且还有助于把软件开发过程中的错误最小化。要了解这方面的更多信息请参看JUnit.org。


acefr 2003-03-06
  • 打赏
  • 举报
回复
有测呀。
sunny32 2003-03-05
  • 打赏
  • 举报
回复
收藏
runyin 2003-03-04
  • 打赏
  • 举报
回复
只用过JTest,巨麻烦。
freebase 2003-03-04
  • 打赏
  • 举报
回复
Junit 只是单元测试框架在Java中的实现,如果你用的是Jbuilder6以上版本,那么Junit已经集成在JBuilder里面。
如果是其他的开发环境,可以到 www.junit.org 下载
还有其他的工具,但都是基于各种开发语言的


有机会访问我的网站 www.oodiscovery.com
l_walker 2003-03-02
  • 打赏
  • 举报
回复
学习中:)
learnerX 2003-03-01
  • 打赏
  • 举报
回复
UP
kreven 2003-02-28
  • 打赏
  • 举报
回复
学习ing:)
chesterwoo 2003-02-28
  • 打赏
  • 举报
回复
单元测试是品保的重要环节。
piaoyunbes 2003-02-19
  • 打赏
  • 举报
回复
没有时间~~~~
mem_fox 2003-02-18
  • 打赏
  • 举报
回复
用Jbuilder封装的TestCase,这样最少所有用test开头的方法都省了敲了
zzjjww 2003-02-17
  • 打赏
  • 举报
回复
一直坚持单元测试,但单元测试没有用工具。
现在正在改正中......
secrets001 2003-02-17
  • 打赏
  • 举报
回复
因地制宜了,项目大时,以后修改可能比较多,用junit很值,项目小,就不要浪费时间了。
小点哥 2003-02-17
  • 打赏
  • 举报
回复
xue xi
fangjun_cn 2003-02-17
  • 打赏
  • 举报
回复
学习中
Anubis 2003-02-15
  • 打赏
  • 举报
回复
偶进行版本控制.........
单体测试,结合测试,强化测试........
加载更多回复(21)

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧