Jiangshachina
同是Java爱好者,相逢何必曾相识!
a cup of Java, cheers!
::
首页
:: ::
联系
::
聚合
::
管理
::
55 随笔 :: 1 文章 :: 289 评论 :: 0 Trackbacks
<
2008年6月
>
日
一
二
三
四
五
六
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
公告
留言簿
(15)
给我留言
查看公开留言
查看私人留言
随笔分类
(157)
Algorithm(3)
(rss)
App Server(1)
(rss)
Applet(5)
(rss)
Build(1)
(rss)
Concurrency(2)
(rss)
CoreJavaTechTips(2)
(rss)
Database(10)
(rss)
db4o(2)
(rss)
Eclipse(3)
(rss)
English
(rss)
Generics(1)
(rss)
GUI(6)
(rss)
Java(33)
(rss)
JavaEE
(rss)
JavaOne(4)
(rss)
JavaSE(8)
(rss)
JavaTutorials(2)
(rss)
JFreeChart(2)
(rss)
JStockChart(2)
(rss)
JUnit(1)
(rss)
Linux(4)
(rss)
Maven(5)
(rss)
Methodology(4)
(rss)
MySQL(6)
(rss)
NetBeans(2)
(rss)
Oracle(2)
(rss)
Others(13)
(rss)
SunTechDays(7)
(rss)
Swing(1)
(rss)
Translation(23)
(rss)
UnitTest(2)
(rss)
随笔档案
(56)
2009年6月 (2)
2009年5月 (1)
2009年4月 (4)
2008年12月 (1)
2008年11月 (3)
2008年10月 (6)
2008年9月 (1)
2008年8月 (1)
2008年7月 (2)
2008年6月 (2)
2008年5月 (2)
2008年4月 (1)
2008年2月 (1)
2007年12月 (1)
2007年11月 (2)
2007年10月 (2)
2007年9月 (1)
2007年7月 (1)
2007年6月 (3)
2007年5月 (1)
2007年4月 (1)
2007年3月 (1)
2007年1月 (1)
2006年12月 (1)
2006年11月 (1)
2006年10月 (1)
2006年9月 (3)
2006年8月 (9)
文章分类
Concurrency
(rss)
Java
(rss)
Java SE
(rss)
Attach
搜索
积分与排名
积分 - 90827
排名 - 125
最新评论
1. re: Maven入门--较复杂的实例(原)
写的很好,很有价值,受益。
--kting
2. re: JStockChart -- Preview(原)
评论内容较长,点击标题查看
--Sha Jiang
3. re: JStockChart -- Preview(原)[未登录]
评论内容较长,点击标题查看
--vivian
4. re: JStockChart -- Preview(原)
> 量图柱线后面的阴影可以去掉不?
哪有阴影?
> jstockchart有定点功能吗
是指什么功能?能说具体一些吗?
--Sha Jiang
5. re: JStockChart -- Preview(原)[未登录]
量图柱线后面的阴影可以去掉不?jstockchart有定点功能吗 谢谢``````
--vivian
6. re: Duke's Choice Award 2009(译)
good...
--无量字幕
7. re: JStockChart -- Preview(原)
> 请问我获得了DateAxis这个对象,有没有什么办法去掉节假日吗?
SegmentedTimeline可以过滤掉你不期望的时间。
--Sha Jiang
8. re: JStockChart -- Preview(原)[未登录]
请问我获得了DateAxis这个对象,有没有什么办法去掉节假日吗?
--111
9. re: JStockChart -- Preview(原)
评论内容较长,点击标题查看
--Sha Jiang
10. re: JStockChart -- Preview(原)
为什么在日期轴上当前时间至收市时间这段没有呢,虽然现在还没有数据,但是图上应该画出来才对嘛,这个图像扩大了开市时间至当前时间的日期轴的比例。。。
--zw1321@126.com
阅读排行榜
1. Maven入门--概念与实例(原)(6593)
2. Maven入门--较复杂的实例(原)(3594)
3. Continuum入门--实例(原)(2827)
4. Maven Weed(原)(2587)
5. 使用Callable返回结果(译)(2507)
6. Rock Star 2008 -- Chet Haase(译)(2169)
7. 在Linux上安装Oracle10g(原)(2099)
8. 下一代Java Applet插件技术(译)(2034)
9. JStockChart -- Getting Started(Timeseries)(原)(2015)
10. 字符串排序(译)(1972)
评论排行榜
1. Maven Weed(原)(34)
2. JStockChart -- Preview(原)(23)
3. Maven入门--概念与实例(原)(17)
4. Maven入门--较复杂的实例(原)(16)
5. Sun Tech Days 2007 -- Preview(原)(14)
6. Java Tutorials -- Generics(译)(13)
7. Sun Tech Days 2007 -- Day 2(原)(12)
8. Sun Tech Days 2007 -- Day 1(原)(10)
9. JStockChart -- Getting Started(Timeseries)(原)(10)
10. Continuum入门--实例(原)(10)
何时编写单元测试?(译)
何时编写单元测试?
是在编写一个方法之前就编写它的单元测试,还是在写完这个方法,甚至是整个类之后才编写单元测试呢?John Ferguson Smart
[1]
在他的
blog
中再次提出了这个问题,并根据自己的经验给出了一些建议。(2008.06.10最后更新)
都别书生气。在你编写一个方法之前或是之后编写单元测试--根据我的经验,只要你在编写代码的
几乎同时
就考虑并编写单元测试程序,那么这就无关紧要了。过后再返回去(或者根本就不回去)写测试程序将导致问题。就我个人而言,我喜欢在编写少量代码之前或紧接着的之后就编写单元测试--这不会打破工作流程,因为
它就是流程的一部分
。
这需要一点儿实践经验--缺乏经验的开发者经常为要写什么样的测试程序而烦恼。但这可能也反映出一个事实:他们同样也不知道要写什么样的代码。一些人评说TDD能够鼓励进行微设计--一种非常底层的设计,它不需要考虑较大的场景。这会发生在缺乏经验的开发者身上;如果你教条般地应用这种方法,同样也会遇上。像行为驱动开发这样的方法在此处就会很酷。当你在写getter方法之前,你会写一个针对这个getter方法的单元测试吗?如果是的话,那么你的单元测试专注的层次就较高了,也会更接近于用户(或系统)的需求。
回到问题的本质,为什么我喜欢把单元测试放在最开始的位置?很简单!我的实践经验告诉我,那样可以帮助提高代码的质量,并且节约调试时间。在开始时写十个小的单元测试所花的时间比在以后修复Bug所花的时间要少,如果代码经过了正确的单元测试,那就不会有Bug了。
事实上,我屡屡见到,如果某些代码经过了适当的单元测试,那么就不会有编码问题。最近就有一个例子:花了一个小时的时间去搜寻Web应用中的一个问题,该问题出现在一个编写正确的Spring-MVC程序中。结果是由于一个检验器类忽略了一个异常。很容易就发现了这个问题,实际上,在看了代码(代码检查(Code Review)也很有效)之后立刻就发现了。但关键是,我们花了一个小时甚至更多的时间去找这个需要进行检查的类。如果这些代码经过了适当的测试,那么就能很快地发现并解决这个问题。
根据我的经验,当人们在编写完程序之后才开始编写单元测试,就如同事后才有这样的想法,他们很难写出这些测试了 ("我已经完成了所有的代码,此时我还得去写单元测试")。或者根本就不去做。在这种情况下,代码是否完成了呢?如果代码运行地很好,那就算是完成了。这样的话,再写单元测试就大大地丧失了它的价值。还不仅如此,事后编写的单元测试将是肤浅的,不会对代码进行良好地测试。或者,开发者已经耗完了时间,他们根本就不想再为单元测试伤神了。
TDD与任何其它的编码实践一样。当你正在学习某个新的技术时,你会倾向于对学习指导亦步亦趋。类似地,当你学习一项武术时,你也会试着一步步地模仿大师的动作,而不必去理解其中的逻辑。一旦你熟悉了某个技术,能够熟练地使用它,并对它有了更深入地理解,
然后
,你就能改进它,并与你之前掌握的其它技术进行溶合了。
译注
[1]John是
Java Power Tools
一书的主作者,也是
java.net
中一位活跃的
Blogger
。
译后
上周在java.net上看到这篇Blog,再联想到自己在平时工作中的单元测试实践,有些感触,故将其翻译了出来,与大家共享。
事先就编写单元测试,还是事后才编写单元测试?这是一个老问题。按照TDD的思想,自然是要先编写单元测试,然后再编写能够通过该单元测试的方法。
但,单元测试并不是TDD的专属领地,很多不实践TDD的项目也在应用着单元测试。
我认为,在不实践TDD的项目中(我自己所处的环境就是如此),事后编写单元测试仍有着其合理性:
1. 以消极的态度来看,既然项目本身不严格要求事先编写单元测试,那么就可以在事后去做了。这至少比不去做要好,聊胜于无嘛。(嘿嘿,是够消极的,但也拿你没办法)
2. 事后编写单元测试至少也是一种检验手段,当然,肯定比不上事先编写的单元测试。因为,事后编写的单元测试很可能会"将就"已经写好的应用程序,正如John所说"事后编写的单元测试将是肤浅的,不会对代码进行良好地测试"。但...仍然是聊胜于无嘛 :-D (哈哈,有完没完了)
3. 可以把单元测试,其中就包含事后单元测试,作为"后来者"了解、学习应用程序的手段。因为单元测试程序就是应用程序的"客户",所以无论它是事先写的,还是事后写的,都能够表现出应用程序的行为。
4. 事后单元测试,也可能转化为事先单元测试。在应用程序的整个生命周期中,维护阶段是最长的。在"漫长"的维护过程中,"之前"所写的"事后"单元测试将会成为"后来者"(包括原始作者本人)的"事先"单元测试。在改进程序的过程中,这些单元测试仍然能起到监督的作用。(orz,有点儿诡辩)
虽然,事后单元测试明显不如事先单元测试,但它的作用仍然不可低估。只要编写了优秀的单元测试程序,无论是在哪个阶段,它都会对改进应用程序有莫大的帮助。(这可不是"聊胜于无"能够表达的)
posted on 2008-06-09 20:55
Sha Jiang
阅读(1668)
评论(2)
编辑
收藏
所属分类:
Others
、
Java
、
Translation
、
UnitTest
、
JUnit
、
Methodology
评论
#
re: 何时编写单元测试?(译)
2008-06-11 14:04
于翔
单元测试程序就是应用程序的"客户",这句话我喜欢!^_^
回复
更多评论
#
re: 何时编写单元测试?(译)
2008-06-11 16:07
Sha Jiang
嘿嘿,谢谢!
但我不敢以这句话的原创者自居*_* 它实际上是我在学习JUnit in Action时记下来的。
当时也与你一样,认为它说得很好,所以一直记在心头。
回复
更多评论
IT新闻
新用户注册
刷新评论列表
标题
姓名
主页
验证码
*
内容(请不要发表任何与政治相关的内容)
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
该文被作者在 2008-10-26 11:18 编辑过
相关文章:
温总理到访(原)
支持Unicode并不意味着应用是国际化的(译)
何时编写单元测试?(译)
Rock Star 2008 -- Chet Haase(译)
Rock Star 2008 -- Joshua Bloch(译)
Sun Tech Days 2007 -- Day 2(原)
Sun Tech Days 2007 -- Day 1(原)
Sun Tech Days 2007 -- Preview(原)
"Java"的由来(译)
Rock Star Josh Bloch(译)
Powered by:
BlogJava
Copyright © Sha Jiang