1. 程序员测试应该很快
测试反馈不应该扰乱编程流程。
2.程序员测试应该是确定性的。
3. 程序员测试应该是预测性的。
程序员测试应该对行为变化敏感,但对结构变化不敏感。如果程序的行为从观察者的角度来看是稳定的,那么任何测试都不应该改变。
结构不变测试需要特定的编程和设计风格以及特定的设计风格。我经常看到断言的测试,“断言此对象使用这些参数将此消息发送到该对象,然后将此其他消息发送到另一个对象。”这样的断言基本上是世界上最笨拙的编程语言语法。如果我关心操作的顺序,那我设计的系统是错误的。
4. 程序员测试应该很便宜。
不仅编写测试方便,也要与代码一样,让别人理解阅读方便,同时应对变化的成本很低,常见的反例是单个行为变化,导致一堆红色测试。如果现在必须单独检查和修改每个测试,那么测试将变为停车制动器。
总结 - 程序员测试应该:
- 最大限度地减少程序员的等待。
- 运行可靠。
- 预测可部署性。
- 回应行为变化。
- 不响应结构变化。
- 写得便宜。
- 阅读便宜。
- 变化便宜。