简单的想法所产生的实现会以增量的方式一点点变得更健壮
每个测试都把实现向完成靠拢
在辅助函数集成和测试通过后,需要用符号常量代替“魔数”
测试失败之后才添加需要的产品代码
脱离目标硬件测试可以触发难以出现的错误情况
关于测试开发周期
运行时库也有 bug,目标编译器的标准库会有bug
持续集成(CI),要写两套代码,代码合并要比较小,辅以自动化测试(由TDD产生),
CI 服务器会监控代码库的签入并在签入完成后触发一个完整的构建和测试过程。如果构建失
败或者任何测试错误发生,团队通常会收到邮件通知
不兼容的头文件,不同的标记、函数名、定义和头文件路径,比如sprintf()和_snprintf(),解决平台独立的问题方法是适配器模式,即用C实现对不同服务的接口
我们没那个时间
为什么不在写了代码之后再写测试
测试也需要维护
单元测试不能发现所有的 bug
我们的构建时间太长
我们有现存的代码
给遗留代码(没有测试的代码)建议的策略是一边产出新的产品功能,一边增量地添加
测试
我们的内存有约束
我们不得不和硬件交互
依赖关系存在于与操作系统、硬件设备或者其它模块交互的代码上
脱离依赖在于严格使用接口、封装、数据隐藏、减少全局变量使用
测试替身不是对它要替代事物的完整模拟
测试替身为被测代码提供间接输入(返回值),或者用来捕获,也可能是检查由被测代
码发向测试替身的间接输出(参数)