﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-『一只小蚂蚁』的专栏-随笔分类-TDD</title><link>http://www.blogjava.net/qixiangnj/category/22110.html</link><description>&lt;strong&gt;生命不息，拼搏不止。&lt;/strong&gt;</description><language>zh-cn</language><lastBuildDate>Tue, 07 Aug 2007 07:59:24 GMT</lastBuildDate><pubDate>Tue, 07 Aug 2007 07:59:24 GMT</pubDate><ttl>60</ttl><item><title>《测试驱动开发》读书笔记</title><link>http://www.blogjava.net/qixiangnj/archive/2007/07/22/131735.html</link><dc:creator>Thomas</dc:creator><author>Thomas</author><pubDate>Sun, 22 Jul 2007 08:45:00 GMT</pubDate><guid>http://www.blogjava.net/qixiangnj/archive/2007/07/22/131735.html</guid><wfw:comment>http://www.blogjava.net/qixiangnj/comments/131735.html</wfw:comment><comments>http://www.blogjava.net/qixiangnj/archive/2007/07/22/131735.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qixiangnj/comments/commentRss/131735.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qixiangnj/services/trackbacks/131735.html</trackback:ping><description><![CDATA[<img alt="" src="http://www.blogjava.net/images/blogjava_net/qixiangnj/23433/r_s1441607.jpg" align="left" height="480" width="381"><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><span style="font-weight: bold;">07/07/22</span><br>TDD在XP中处于核心地位<br>||<br>代码整洁可用<br><br>1）可预测<br>2）思考另一种更好的方法<br>&#8230;&#8230;<br><br>自动测试失败 —&gt; 重写代码<br>消除重复设计<br><br>不可运行 —&gt; 可运行 —&gt; 重构<br><br>QA：被动 —&gt; 主动<br>PM：精确把握开发进度<br>SE：节约时间<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ||<br>每天都有新功能的软件成品<br><br>我们需要<span style="font-weight: bold;">勇气</span>！<br><br>防倒转装置<br><br>编程解决的问题越复杂，每次测试所覆盖的范围就应该越小<br><br>《解析极限编程》<br><br><img alt="" src="http://www.blogjava.net/images/blogjava_net/qixiangnj/23433/r_tdd01.jpg" align="left" height="181" width="469"><br><br><br><br><br><br><br><br><br><br>（by Dia）<br><br>改变了编程习惯<br><br><span style="font-weight: bold;">No</span>：软件的安全性，并行性<br><br>只保留一个球在空中！<br><br>模式拷贝<br>模式一般都是半成品，用到你的项目中还要再回一次炉。<br><br>TDD Steps:<br>1. add a new test quickly<br>2. run all tests, failed<br>3. modify<br>4. run all tests again, ok!<br>5. refactor<br><br>我们不是从建立对象开始，而是从测试开始！<br><br>消除程序中的重复设计就是消除<span style="font-weight: bold;">依赖关系</span>。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ||<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL代码到处都是，etc<br><br>总体流程：<br>1. 写一个测试程序<br>Story、interface<br>2. 让测试程序运行<br>1）伪实现<br>2）显明实现——将真实的实现代码键入<br>尽快地让测试程序可运行是压倒一切的中心任务！<br>3. 编写合格的代码<br>clean code that works!<br>首先解决&#8220;可用&#8221;的问题，再解决&#8220;代码整洁&#8221;的问题。<br><br><br><span style="font-weight: bold;">07/07/23</span><br>Ch3 一切均等<br>数值对象（Value Object）<br>TDD &lt;== 三角法<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ||<br>我们只有在例子达到2个或更多时才对代码实施一般化。<br><br>Ch4 私有性<br>我们并非要追求绝对的完美。<br>通过表述任何事物都从代码和测试两条线路来走，我们希望尽可能地减少缺陷，以在前进的路上增强自信。<br><br>Ch5 法郎在诉说<br><span style="font-style: italic;">当瑞士法郎与美元的兑换率为2:1的时候，5美元+10瑞士法郎=10美元</span><br>快捷方式？<br>拷贝美元Dollar的实现代码，并用法郎Franc代替美元Dollar。<br><br>通过小的测试先行动起来；<br>无所顾忌地通过<span style="font-weight: bold;">复制和编辑</span>来写出这个测试程序；<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ||<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 让测试程序工作<br>自我保证在重复设计消除之前绝不回家。<br><br><br><span style="font-weight: bold;">07/07/27</span><br>Ch6 再谈一切均等<br>丑陋的代码拷贝和粘贴<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ||<br>一个类继承另一个类&nbsp; bad!<br>寻找一个共同的父类&nbsp; good!<br><br>你将经常在没有足够测试程序的代码中实施TDD（至少未来十年左右）。当没有足够的测试程序时，你一定会遇到<span style="font-weight: bold;">不被测试程序支持的重构</span>。<br><br>写出你希望拥有的测试。如果你不这样做，那么迟早会在重构时出现麻烦。<br><br>Ch7 苹果和桔子<br>比较法郎对象与美元对象<br>things to do:<br>1. 着手解决一个困扰我们的难题并将它转化为一个测试程序<br>2. 用一种合理但不完美的方法（getClass()）使测试程序运行通过<br>3. 除非有更好的动机，否则不要引入更多的设计<br><br>Ch8 制造对象<br>美元/瑞士法郎之间的重复设计<br>       <img src ="http://www.blogjava.net/qixiangnj/aggbug/131735.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qixiangnj/" target="_blank">Thomas</a> 2007-07-22 16:45 <a href="http://www.blogjava.net/qixiangnj/archive/2007/07/22/131735.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JUnit学习笔记（二）</title><link>http://www.blogjava.net/qixiangnj/archive/2007/05/27/120358.html</link><dc:creator>Thomas</dc:creator><author>Thomas</author><pubDate>Sun, 27 May 2007 15:11:00 GMT</pubDate><guid>http://www.blogjava.net/qixiangnj/archive/2007/05/27/120358.html</guid><wfw:comment>http://www.blogjava.net/qixiangnj/comments/120358.html</wfw:comment><comments>http://www.blogjava.net/qixiangnj/archive/2007/05/27/120358.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/qixiangnj/comments/commentRss/120358.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qixiangnj/services/trackbacks/120358.html</trackback:ping><description><![CDATA[<span style="font-weight: bold;">最佳实践</span>：单元测试代码和被测试代码使用一样的包，不同的目录。<br><br><br><span style="font-weight: bold;">测试你的equals方法<br></span>assertEquals()<br><br>framework将基本类型当作数值来比较（而不是对象）。<br><br>方法的返回值是对象：<br>1）取回返回值所有可读的属性值。<br><span style="color: red;"><span style="font-weight: bold;">2）</span><span style="color: #000000;">创建一个代表期望值的对象。<br><br>如果你的对象不是数值对象，那么就无须去测试它们的相等性。<br><br>Mike Bowler<br><span style="font-weight: bold;">GSBase</span>(http://gsbase.sourceforge.net)<br><span style="font-weight: bold;">EqualsTester<br><br></span>&#8220;RST&#8221;原则（反身性、对称性、传递性）<br><br>assertFalse()<br><br><span style="font-weight: bold;">JUnit-addons</span>(http://junit-addons.sourceforge.net)<br><span style="font-weight: bold;">EqualsHashCodeTestCase</span><br><span style="font-weight: bold;">assertNotEquals()<br><br><br>测试一个没有返回值的方法<br></span>1. 创建一个空容器<br>2. 查询该容器应该得不到任何项<br>3. 将对象添加到容器中，并查询容器<br>4. 现在容器包含了刚才添加的项<br><br><br><span style="font-weight: bold;">测试构造函数</span><br><br><br><span style="font-weight: bold;">测试获取器<br><br><br>测试设置器<br><br><span style="color: #ff0000;"></span>------------------------------------------------------------------------------------<br>最佳实践</span>：测试任何可能的错误。<span style="color: #ff0000;">单元测试不是用来证明您是对的，而是为了证明您没有错</span>。<br><br><span style="font-weight: bold;">fixture</span>：在执行一个或者多个测试方法时需要一系列公共资源或者数据，例如测试环境、测试数据等等。<br><br><span style="font-weight: bold;">方法级别</span><br>1. <span style="font-weight: bold;">@Before<br></span>2. <span style="font-weight: bold;">@After</span><br>3. <span style="font-weight: bold;">public void<br><br>类级别</span><br>1. <span style="font-weight: bold;">@BeforeClass</span><br>2. <span style="font-weight: bold;">@AfterClass</span><br>3. <span style="font-weight: bold;">public static void</span><br><br><span style="font-weight: bold;">异常和时间测试</span><br>&nbsp; expected、timeout<br><br><span style="font-weight: bold;">忽略测试方法</span><br>&nbsp; @Ignore<br><br><span style="font-weight: bold;">测试运行器</span><br><span style="font-weight: bold;"></span><span style="font-weight: bold;"></span>&nbsp; @RunWith(CustomTestRunner.class)<br><br><span style="font-weight: bold;">测试套件</span>：批量运行测试类<br>1. 创建一个空类（入口）<br>2. @RunWith、@Suite.SuiteClasses<br>3. @RunWith(Suite.class)<br>4. @Suite.SuiteClasses(TestXX.class)<br>5. public<br><br><span style="font-weight: bold;">参数化测试</span><br>1. @RunWith(Parameterized.class)<br>2. 声明变量，用于存放期望值和测试所用数据<br>3. @Parameters、public static Collection<br>4. 声明一个带有参数的公共构造函数，为2中声明的变量赋值<br>5. 测试<br><br><span style="font-weight: bold;">JUnit和Ant<br></span></span></span><span style="color: red;"><span style="color: #000000;"><span style="font-weight: bold;">------------------------------------------------------------------------------------<br><br><span style="color: red;">测试接口</span>（?）<br><br><br>测试JavaBean<br><br><br>参考资料</span>：<br>1. </span></span>《JUnit Recipes中文版》<br>2. 单元测试利器 JUnit 4（http://www.ibm.com/developerworks/cn/java/j-lo-junit4/）<br> <img src ="http://www.blogjava.net/qixiangnj/aggbug/120358.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qixiangnj/" target="_blank">Thomas</a> 2007-05-27 23:11 <a href="http://www.blogjava.net/qixiangnj/archive/2007/05/27/120358.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JUnit学习笔记（一）</title><link>http://www.blogjava.net/qixiangnj/archive/2007/05/19/118597.html</link><dc:creator>Thomas</dc:creator><author>Thomas</author><pubDate>Sat, 19 May 2007 13:52:00 GMT</pubDate><guid>http://www.blogjava.net/qixiangnj/archive/2007/05/19/118597.html</guid><wfw:comment>http://www.blogjava.net/qixiangnj/comments/118597.html</wfw:comment><comments>http://www.blogjava.net/qixiangnj/archive/2007/05/19/118597.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qixiangnj/comments/commentRss/118597.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qixiangnj/services/trackbacks/118597.html</trackback:ping><description><![CDATA[<span style="font-weight: bold;">步骤</span>：<br>1. arrange<br>2. act<br>3. assert<br><br>test suite 测试套件<br>TDD<br>Test-Driven Development: By Example(Kent Beck)<br><br>test case 测试用例<br>fixture 固定器<br><br><span style="font-weight: bold;">一些好的实践</span>：<br>1. 测试命名<br>&nbsp; a. 测试的名字应该展示了测试的目的<br>&nbsp;&nbsp;&nbsp;&nbsp; testWithdraw()<br>&nbsp; b. 使用下划线字符来放在行为名称和特殊用例之间<br>&nbsp;&nbsp;&nbsp;&nbsp; testWithdraw_Zero()<br>2. 命名测试用例的类<br>&nbsp; a. 以被测试的类来命名测试用例的类<br>&nbsp;&nbsp;&nbsp;&nbsp; "Account"--&gt;"AccountTest"<br>&nbsp; b. 推荐的是动词短语<br>&nbsp;&nbsp;&nbsp;&nbsp; WithdrawFromAccountTest<br>3. 测试的是行为（动词），而不是类（名词）<br>&nbsp;&nbsp; 测试太依赖于特定的实现，重构时，会遇到麻烦。<br><br><br>参考资料：<br>1. 《JUnit Recipes中文版》<br>  <img src ="http://www.blogjava.net/qixiangnj/aggbug/118597.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qixiangnj/" target="_blank">Thomas</a> 2007-05-19 21:52 <a href="http://www.blogjava.net/qixiangnj/archive/2007/05/19/118597.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>