WEB开发网
开发学院软件开发Java 演化架构与紧急设计: 测试驱动设计,第 1 部分 阅读

演化架构与紧急设计: 测试驱动设计,第 1 部分

 2009-11-05 00:00:00 来源:WEB开发网   
核心提示: 完全数要展示 TDD 的设计优点,我需要用到一个待解决的问题,演化架构与紧急设计: 测试驱动设计,第 1 部分(2),在 Kent Beck 的 Test Driven Development 一书中,他使用货币作为示例 — 非常优秀的 TDD 例子,这段代码读起来更像是一个句子,J

完全数

要展示 TDD 的设计优点,我需要用到一个待解决的问题。在 Kent Beck 的 Test Driven Development 一书中,他使用货币作为示例 — 非常优秀的 TDD 例子,但是有点过分简单。真正的挑战是找到这样一个示例,该示例本身并没有复杂到让您对问题束手无策,但是它的复杂度足以展示真正的价值。

为此,我选择了完全数。对于不熟悉数学知识的人,此概念可追溯到 Euclid 之前(他完成了导出完全数的早期验证之一)。完全数指其真因子相加等于数字本身的数字。例如,6 是一个完全数,因为 6 的因子(不包括 6 本身)是 1、2 和 3,而 1 + 2 + 3 = 6。更规则的完全数定义是因子(不包括该数字本身)之和等于该数字的数字。在我的示例中,计算结果是 1 + 2 + 3 +6 - 6 = 6。

这就是要处理的问题域:创建一个完全数查找程序。我将用两种不同的方法实现此解决方案。首先,我将打消想要执行 TDD 的念头并且只是编写解决方案,然后为它编写测试。然后,我将设计出 TDD 版本的解决方案,以便可以比较和对照两种方法。

对于本例,我用 Java 语言(版本 5 或更高版本,因为我将在测试中使用注释)、JUnit 4.x(最新版本)和来自 Google 代码的 Hamcrest 匹配器实现一个完全数查找程序。Hamcrest 匹配器将在标准的 JUnit 匹配器顶部提供一个人本接口(humane interface)语法糖。例如,不必编写 assertEquals(expected, actual),您可以编写 assertEquals(actual, is(expected)),这段代码读起来更像是一个句子。JUnit 4.x 附带了 Hamcrest 匹配器(这些匹配器只是静态导入);如果仍然要使用 JUnit 3.x,您可以下载一个兼容版本。

后测试开发

清单 1 显示了第一个版本的 PerfectNumberFinder:

上一页  1 2 3 4 5 6 7  下一页

Tags:演化 架构 紧急

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接