单元测试十二信条
http://www.developertesting.com/archives/month200705/20070504-000425.html
http://www.agitar.com/downloads/TheWayOfTestivus.pdf
Testivus的方式——从一个古代软件创业公司得到的单元测试的智慧
ByAlbertoSavia
2077年4月26日
总结:
一些对于开发者和单元测试的好建议。用一些神秘的东方古老的智慧来包装,希望得到您的注意。
如果你写代码,写测试
学生问大师程序员:
“什么时候我可以停止写测试?”
大师回答:
“当你停止写代码的时候”
学生问:
“什么时候我可以停止写代码?”
大师回答:
“当你成为一个经理的时候。”
学生问:
“什么时候我可以成为一个经理?”
大师回答:
“当你停止写测试的时候。”
学生赶紧去写测试。
留下一些打滑的痕迹。
如果代码值得编写,那么就值得拥有测试。
不要被单元测试的教条所捆绑
教条说:
“做这个。
只做这个。
只用这种方法来做。
因为我叫你做,你就做。”
教条是不灵活的。
测试需要灵活。
教条扼杀创造性。
测试需要创造性。
拥抱单元测试的信条
信条说:
“做好事,好事就会发生。
用你所知道的方法来做。
用你喜欢的方法来做。”
信条是灵活的。
测试需要灵活。
信条依靠创造性。
测试需要创造性。
统一考虑编码和测试
当你写代码的时候,考虑测试。
当你些测试的时候,考虑代码。
当你统一考虑测试和代码的时候,
测试很简单,但吗很美丽。
测试比单元更重要
学生问伟大的程序员大师FlyingFeathers:
“是什么使一个测试称为单元测试。”
这个问答的程序员大师回答:
“如果它跟数据库对话,它不是一个单元测试。
如果它通过网络通讯,它不是一个单元测试。
如果它接触文件系统,它不是一个单元测试。
如果它不能在同一时间和其它任何单元测试一起运行,它不是一个单元测试。
如果你有一些特殊的环境来运行它,他不是一个单元测试。”
其它大师程序员跳出来开始争辩。
“对不起,我问了这个问题。”学生说。
那个晚上后来他接到了一个更伟大的程序员大师的字条。字条上说:
“那个伟大的程序员大师FlyingFeathers的回答不是一个优秀的指导。
遵守它,大部分时间你都没法做好。
但你不需要被任何教条捆绑。
就写你需要的测试。”
学生睡得很好。
其它大师继续争论到漫漫长夜。
测试的最好时间是当你的代码还新鲜的时候
你的代码就像粘土。
新鲜的时候,它很软,可塑。
随着时间过去,他变得坚硬,脆弱。
如果你在代码新鲜的时候写测试,
容易改变,测试很简单。
代码和测试都变得更强。
测试不运行很浪费
经常运行你的测试。
不要让他们变馊。
当他们通过的时候值得高兴。
当他们失败的时候也值得高兴。
今天不完美的测试比某天完美的测试更好
完美是好的敌人。
不要等待最好,而要做得更好。
不要等待更好,要把它做好。
写你今天能写的测试
一个丑陋的测试比没有测试好
当你的代码很丑陋的时候,你的测试可能也很丑陋。
你不喜欢写丑陋的测试。
但丑陋的测试比没有测试好。
不要让丑陋的测试阻止你写测试,
让丑陋的测试阻止你写更丑陋的测试。
有时候,测试证明方法是对的
学生问两个程序员大师:
“我不能不通过Moking和违反封装来测试这段代码,
我该怎么办?”
一个程序员大师回答:
“Mocking不好,你不应该违反封装。
重写这段代码来使你正确的测试它。”
另一个程序员大师回答:
“Mocking好,测试胜过封装。”
学生迷惑了,出去喝啤酒。
在一个水池边,他看到了最伟大的程序员大师一边喝啤酒,一边吃布法罗辣鸡翅。
“最伟大的程序员大师,”学生说,“我以为你不喝酒,
你不是素食者么?”
大师笑着回答:
“有时候,啤酒能够治疗你的口渴,
而鸡翅能治疗你的饥饿啊。”
学生不再困惑了。
只有傻瓜不用工具
农夫不用犁不是一个好农夫。
会计不用算盘不是一个好会计。
有些任务最好用手来做。
有些任务最好用工具。
当你用工具可以做的更好的时候,用手不够高贵。
当你不需要用手的时候,用手不够聪明。
好的测试会失败
学生走到大师程序员跟前说:
“我所有的测试一直都通过。难道我不应该晋升么?”
大师打了学生一个耳光,说:
“如果你的测试一直是通过的,那么你需要些更好的测试。”
学生摸着红红的脸颊到HR那里告状。
但那是另外一个故事了。
Testivus之路
如果你写代码,写测试
不要被单元测试的教条所捆绑
拥抱单元测试的信条
统一考虑代码和测试
测试比单元更重要
测试的最好时间是当你的代码还新鲜的时候
测试不运行很浪费
今天不完美的测试比某天完美的测试更好
一个丑陋的测试比没有测试好
有时候,测试证明方法是对的
只有傻瓜不用工具
好的测试会失败
中文版PPT:
http://wenku.baidu.com/view/9d18e64069eae009581bec19.html?st=1