技术开发 频道

测试驱动的编程

    还不能编译这个测试(您注意到了其中的模式吗?),因为 Person 内没有 setBirthDate() 方法。在创建了这个方法之后,Person 将类似于清单 4 所示:

    清单 4. 更新的 Person 类

    


    Person 中的 getAge() 仍然没有什么变化,所以测试失败。图 2 显示了 JUnit Fast View 中出现的信息:

    图 2. JUnit 断言失败

    

    生成的 AssertionFailedError 告诉我结果不是 31 而是 0。这个失败在预料之中,因为我没有改变 getAge() 方法来做某些不同的事。现在仅仅编写足够使测试通过的代码(这里有两个测试)。我必须允许年龄的缺省值为 0,但我必须计算出生于 1971 年 3 月 23 日的人的年龄。一些程序员(包括 Kent Beck)建议在这一点上尽可能简单,譬如检查 birthdate,看它是否为 null — 如果为 null,则返回 0,否则返回 31 — 然后编写另一个测试使计算更智能。一小步一小步地思考问题这种方法是很好的技术,我们要采用这种技术,当您想回到上面提到的基本规程来使自己摆脱调试惯例时,那是再好不过。但这里我想使该示例略微简单些,所以我仅仅试图通过按我所希望的方式,用 Calendar 计算年龄,使该测试通过。清单 5 显示了 Person 中我所编写的代码:

    清单 5. getAge() 实现

    
 

0
相关文章