TDD测试驱动开发教程

按主题探索文章、教程与工程实践。

7 篇内容

2018

TDD实战(一)开发模式

TDD是测试驱动开发(Test-Driven Development)的英文简称,是敏捷开发中的一项核心实践和技术,也是一种设计方法论。TDD的原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码。TDD虽是敏捷方法的核心实践,但不只适用于XP(Extreme Programming),同样可以适用于其他开发方法和过程。 – 百 …

1 分钟阅读

TDD实战(二)“井字游戏” 需求一

保证你会玩“井字游戏” 并理解它的规则。 先定义边界,以及将棋子放在哪些地方非法。 可将棋子放在3×3棋盘上任何没有棋子的地方。 将需求分成三个测试: 如果棋子放在超出了X轴边界的地方,就引发 RuntimeException 异常。 如果棋子放在超出了Y轴边界的地方,就引发 RuntimeException 异常。 如果棋子放在已经有棋子的地方, …

2 分钟阅读

TDD实战(三)“井字游戏” 需求二

现在处理轮到哪个玩家落子问题。 需要提供一种途径,用于判断接下来该谁落子。 将需求分成三个测试: 玩家 X 先下; 如果上一次是 X 下的,接下来将轮到 O 下。 如果上一次是 O 下的,接下来将轮到 X 下。 在这条用例中用到了 JUnit 的断言方法 assertEquals(),通过 nextPlayer() 判断下一个下棋的是否是 X 玩家。 对于当 …

1 分钟阅读

TDD实战(四)“井字游戏” 需求三

现在考虑这个游戏的获胜规则,这部分工作会比较麻烦。我们必须检查所可能获胜的情况,只要满足其中一个,就宣布相应玩家获胜。 最先在水平、锤直或对角线上将自己的3个标记连起来的玩家获胜。 首先定义play() 的默认返回值: 如果不满足获胜条件,则无人获胜。 这个用例很容易满足,修改 play() 方法如下: ** 执行 测试用例1 检查它是否运行通过。 处理各种 …

2 分钟阅读

TDD实战(五)“井字游戏” 需求三

继续实现需求3,检查所可能获胜的情况,只要满足其中一个,就宣布相应玩家获胜。 最先在水平、锤直或对角线上将自己的3个标记连起来的玩家获胜。 现在我们检查是否有垂直线完全被某个玩家占据。 一个玩家的棋子占据整条垂直线就赢了。 这个实现和前面一个类似,前面在水平方向上做检查,现在需要在垂直方向上做同样的检查。 ** 执行 测试用例1 检查它是否运行通过。 水平线 …

2 分钟阅读

TDD实战(六)“井字游戏” 需求四

如果出现平局如何处理。 所有格子都占满则为平局。 可以通过填满棋盘的所有格子测试平局结果。 检查是否为平局非常简单 — 只需要检查是否已占满整个棋盘,所以,可以通过遍历数组board实现。 ** 执行 测试用例1 检查它是否运行通过。 ** 执行 所有测试用例 检查它们是否全部运行通过。 虽然 isWin()方法与最后的个测试无关,但也可以重构。 我们无须检 …

2 分钟阅读

TDD实战(七)Jacoco 代码覆盖率

最后一节,和TDD没有直关系,我这里要介绍代码覆盖率工具 Jacoco 。 由于整个TDD项目由 Gradle构建,所以在build.gradle文件中添加 Jacoco 插件。 切换到TDD 项目目录。执行: 在项目...\TDD\build\reports\jacoco\test\html目录下生成index.html报告,通过浏览器打开。 看到这样一张 …

1 分钟阅读