Skip to content

Latest commit

 

History

History
24 lines (17 loc) · 2.04 KB

02.0.md

File metadata and controls

24 lines (17 loc) · 2.04 KB

编写可测试的代码

对于软件开发初学者来说,编写可测试的代码是一件比较困难的事情。但如果你掌握了软件设计的几个基本原则,并严格遵守,你写的代码就很自然是可测试的。当然这里不是讲解设计原则的,但还是要提一下,可测试的代码应该是怎样的。

单一职责原则

  • 一个类或者模块应该有且只有一个改变的原因

可测试的代码一定是单一职责的。无论是一个对函数,还是struct,还是包,在每个粒度上的职责要单一,这样才能明确测试目标。个人认为这个是最重要的一条,是每个程序员都应该掌握的基本技能。

依赖倒置原则

  • 高层模块不应该依赖低层模块,两者都应该依赖其抽象
  • 抽象不应该依赖细节
  • 细节应该依赖抽象

所有的程序员都不喜欢写重复的代码,所以有了抽象。抽象是事物本质的高度概括,它是相对稳定不变的。比如A依赖B,当测试A的时候,如果B是一个具体的实现,那么测试A的时候如果B存在bug,会导致A不可测。如果B是一个抽象的接口,那么就可以写一个B的Mock,减少A对外部的依赖。

接口隔离原则

  • 客户端不应该依赖它不需要的接口。
  • 类间的依赖关系应该建立在最小的接口上。

在软件设计中不同粒度的接口是不一样的。一个函数可以叫接口,一个interface也可以叫接口,一个http的api也可以是接口。接口的目的在于屏蔽了内部细节,将外部需要的功能暴露出去。一个模块依赖的接口越少测试时的不可控因素就越少。还是上面的例子,比如A依赖B的接口,当测试A的时候,如果依赖的B接口很少,就可以很容易写一个B接口的Mock。

迪米特法则

  • 一个软件实体应当尽可能少地与其他实体发生相互作用。

迪米特法是为了减少实体间的耦合度,低耦合的好处在是显而易见的。测试中,实体间耦合度小,更容易定位到问题。