可测试性代码
# 什么是代码的可测试性?
粗略地讲,所谓代码的可测试性,就是针对代码编写单元测试的难易程度。对于一段代码,如果很难为其编写单元测试,或者单元测试写起来很费劲,需要依靠单元测试框架中很高级的特性,那往往就意味着代码设计得不够合理,代码的可测试性不好。
# 编写可测试性代码的最有效手段?
依赖注入是编写可测试性代码的最有效手段。通过依赖注入,我们在编写单元测试的时候,可以通过 mock 的方法解依赖外部服务,这也是我们在编写单元测试的过程中最有技术挑战的地方。
# 常见的 Anti-Patterns
- 代码中包含未决行为逻辑
- 未决行为逻辑:代码的输出是随机或者说不确定
- 一般可以对未决行为逻辑进行封装方法
- 滥用可变全局变量
- 滥用全局变量可能造成,在使用并行执行单元测试时,结果不一致
- 滥用静态方法
- 静态方法和静态变量类似,只有这个静态方法执行耗时太长、依赖外部资源、逻辑复杂、行为未决等情况下,我们才需要再单元测试中 mock 这个静态方法。
- 使用复杂的继承关系
- 如果我们利用组合而非继承来组织类之间的关系,类之间的结构层次比较扁平,在编写单元测试的时候,只需要 mock 类所组合依赖的对象即可。
- 高度耦合的代码
- 如果一个类职责很重,需要依赖十几个外部对象才能完成工作,代码高度耦合,那我们在编写单元测试的时候,可能需要 mock 这十几个依赖的对象。
- 不管是从代码设计的角度来说,还是从编写单元测试的角度来说,这都是不合理的。
上次更新: 2020/08/24, 10:08:00