# 引言 #:单元测试的目的是什么呢?就是完整检测代码单元的功能逻辑,找出代码单元本身的所有功能逻辑错误,具体来说,就是检测对数据的各种分支是否考虑全面,处理是否正确。形象地说,单元测试的目的就是验证:无论别人怎么样,我总是对的。“别人”,是指相关代码或环境,“我”,是指正在编写或测试的代码单元。
单元测试为啥能提高代码质量呢?由于每个单元有独立的逻辑,做单元测试时需要隔离外部依赖,确保这些依赖不影响验证逻辑。因为要把各种依赖分离,单元测试会促进工程进行组件拆分,整理工程依赖关系,更大程度减少代码耦合。这样写出来的代码,更好维护,更好扩展,从而提高代码质量。
那么我们应该如何编写单元测试的代码?当遇到被测代码可测性差时如何解决?本文试着从个人实践出发来阐述这两个问题。
姿势1: 3A原则组织单元测试
单元测试都有相同的流程。首先需要设置好合适的条件,然后执行代表要验证的行为的代码,最后验证结果是否和预期的一样。
测试应当尽可能地直接反映其测试意图。这就意味着阅读测试代码的人不需要细细品读代码中的每一行,就能很容易的理解测试的基本构成:单元测试的初始化(Arrange)、测试的行为(Action)、以及怎样验证测试结果(Assert)。
Arrange、Action、Assert提醒你直观地去组织单元测试以便能够快速的阅读代码。
1、Arrange初始化
单元测试中的初始化工作,是为了解决被测函数中必要的前置依赖的问题。如下例所示: