把测试当作系统模块
大多人在设计系统的时候经常犯一个错误,没有把测试作为一个模块设计到系统中。
未经设计的测试会使系统变得难以改变。经常一个很小大改动,或者重构,就会使得很多测试失败。
优良的测试不会使得系统的开发和进化受到限制。它会作为系统的一个独立的模块而存在。它也应该具有模块的界限,解耦和依赖倒置。
测试API
实现以上方案的一个技巧是,给测试模块提供专用的API。
减少测试时的各种配置的设置,例如提供一个不需要登陆的API,提供一个不使用云数据库的API。这样测试可以与这些配置解耦,更容易去测试核心逻辑。
减少结构上的耦合。很多情况下,大家写测试都是一一对应的。例如在写单元测试的时候,将系统的类和方法与测试中的类与方法一一对应。这样的测试具有极强的耦合,导致难以修改和扩展。但是当我们应用测试API时,将一组类或方法所提供的功能,总结为一个API。这样,测试就和系统解耦了。测试只关心功能的正确性,而不关心实现的细节。