1.通过使用面向测试的设计方法,更好地分离关注点
通过有意地设计出方便测试的代码,可以让代码具有更好的结构和可维护性。编写代码的时候要记住这个根本性问题:我要如何对代码进行测试呢?如果答案不是显而易见,代码编写的看起来很丑陋或者难以编写的话,就应该修改一些设计,直到易于测试为止。
2.通过定义类不变形更好地产品设计意图
类的不变性是指一个或者几个针对类对象的断言。如果一个类对象有效的话,这些断言都必须为。这一点是不可改变的。例如:对一个实现的sorted list的类,它的不变性就是:他的内容必须是有序的。不管外面发生的任何事情,或者调用了该类的任何方法,这个list都必须是有序的--至少从对象的外面看来是有序的。类的不变性是内部实现的产物。
适合应用类的不变性的领域:结构化、数学不变性、数据一致性
3.通过使用测试驱动的设计方法,改善接口的设计
编写实现代码之前就先编写它们的测试代码,
4.确立和局部化验证的责任
测试无效的参数,谁负责验证输入的数据?你并不能信任系统的任何部分已经检查了输入数据,因此你只能亲自检查这些数据--或者至少针对你特别关注的情况来,建成数据的某些方面。重复检查这些数据也违反了DRY原则,同时还浪费了大量的时间和精力。谁辅助检查输入数据的有效性?通常最简单的办法是”别让野蛮人进门“。在系统入口的位置就检查输入,在系统内部就不需要再次检查。如果你的代码负责检查输入数据,那么就需要对这些代码进行单元测试,因为系统中其余的部分完全依赖于你的检查结果,并且只依赖于你的检查结果。