著名的敏捷开发专家David Astels通过一个从头至尾使用Java和JUnit测试框架创建的项目,向你展示了TDD的精妙之处。你将会领悟到“测试为先”的工作机理,它之所以成为一种有效开发方法的原因,使用过程中将会碰到的困难以及如何在现实中取得TDD所许诺的一切。
·涵盖重构、意图导向编程(programming by intention)、模拟对象(mock object)及更多内容
·讨论了针对C++、C#/.NET、VB6、Python、Ruby和Smalltalk的TDD框架
·介绍了以前未发表过的用于开发GUI软件的测试为先(test—first)技术
·附录介绍了极限编程和敏捷建模的相关知识
·面向所有程序员及项目经理
让测试驱动开发(TDD)为你工作!
本书将使开发人员编写的软件更加简单、精益和可靠……一句话,更优秀。
序 言
前 言
第1部分 背景知识介绍
第1章 测试驱动开发
什么是测试驱动开发?
让计算机来告诉你
一个简短的例子
小结
第2章 重构
什么是重构?
何时进行重构?
如何进行重构?
一些重要的重构方法
通过重构来引入模式(Refactoring to Patterns)
小结
第3章 意图导向的编程
名字
简单
要做有根据的假设(warranted assumption)
如何进行意图导向的编程?
“不要注释”
小结
第2部分 工具与技术
第4章 JUnit
体系结构概览
断言
编写一个TestCase
运行测试
使用settJp()和tearDown()
使用TestSuite
相互关联
测试的归属问题
一些建议
小结
第5章 JUnit扩展
标准扩展
使用MockObjects补充的断言
使用JunitPerf来测试性能与可伸缩性
Daedalos JLlnit扩展
使用XMLUnit编写基于XML的测试
Gargoyle软件公司的JIJnit扩展
第6章 与JUnit有关的工具
Jester
NoUnit
Clover
Eclipse
IDEA
第7章 模拟对象
模拟对象
例子解说
模拟对象的用途
如果能这样该有多好?
一个普通的例子
MockObjects框架
MockMaker
EasyMock
小结
第8章 以测试优先的方式开发一个GUI应用
例子
AWT机器人
蛮力测试(Brute Force)
JFCUnit
Jemmy
超瘦(Ultru-Thin)GUI
小结
第3部分 一个彻头彻尾的采用TDD开发的Java软件项目
第9章 项目描述
概述
用户描述及相关任务
第10章 电影列表
为电影创建一个容器
为电影列表创建GuI
在GUI中增加一个电影
回顾
第11章 可以为电影更名
支持对电影名进行编辑
对电影更名的GUI
回顾
第12章 电影是惟一的
电影是惟一的
发现不惟一时的出错信息
回顾
第13章 评分
给电影打分
在GUI中显示评分
对评分进行编辑
回顾
第14章 类别
增加一种类别
在GuI中显示类别
提供可供选择的类别
回顾
第15章 根据类别进行筛选
获得基于类别的子列表(sublist)
支持一种称做ALL(全部类别)的类别
在GUI上添加类别选择器(category selector)
处理电影类别的变更
界面修整
回顾
第16章 持久性存储
将数据输出到平直文件中
GUI中的Save-As菜单项
GUI中的Save菜单项
从平直文件中读取数据
加载到GUI中
回顾
第17章 排序
电影比较
对电影列表进行排序
从MovieListEditor中获取排序后的列表
在GuI中增加排序操作
回顾
第18章 多重评分
多重评分
评分来源
修正后的持久性存储
在GUI中显示电影的多重评分
在GUI中添加增加评分的功能
删除单一评分域
回顾
第19章 评论
为评分附加评论
保存评论
加载评论
显示评论
增加评论
回顾
第20章 项目回顾
设计
测试代码与应用代码的比较
测试质量
模拟对象的使用
总体评述
调试
测试清单
小结
第4部分xUnit一族
第21章 RubyUnit
框架描述
范例
第22章 SUnit
框架描述
范例
第23章 CppUnit
框架描述
范例
第24章 NUnit
框架描述
范例
第25章 PytJnit
框架描述
范例
第26章 vbUnit
框架描述
范例
附录A 极限编程
敏捷革命
极限编程
四种变化量
价值观
实践方法
小结
附录B 敏捷建模
与建模有关的一些荒诞论调
敏捷建模(AM)介绍
什么是敏捷模型?
附录C 联机资源
论坛
有关敏捷开发过程的信息
有关极限编程的信息
与Junit有关的软件
与JUnit有关的信息
工具
其他的xUNIT家族成员
公司
杂类
附录D 练习答案
参考文献