我们以问题导入的形式来阐述
1.单元测试是什么?
单元测试是对程序的最小单元进行的测试,它关注的是被测单元是否如期实现了它的功能
2.为什么要写单元测试,它的核心价值是什么?
研发写完了业务代码之后,在没有单元测试的情况下,是无法保证他写的函数方法一定是正确的,正确与否仅仅依靠研发同学个人的编码水平,如果有单元测试,我们就可以保证每个函数方法都是正确的,每个独立的单元都如期实现了它的功能,总之,单元测试的核心价值就是保证每个最小单元是正确的,就好比一辆汽车,如果单元测试通过,那么我们可以保证它每个最小零部件是完好的,如果后期车辆出现问题,那问题不可能是某个部件坏了,只可能是组装的问题,也就是我们不需要换件。
3.怎么写出高质量的单元测试代码?
到了我们最关心的问题,如果写出高质量的单元测试代码呢?那首先我们就要明确我们这个单元测试要解决的问题是什么,因为单元测试的定义是对程序的最小单元进行测试,所以我们解决的就是每个单元是正确的,那么理想的状态就是每个单元是绝对独立的,互相之间是没有依赖的,但这明显过于理想,实际情况是就算拆解成最小单元,有些单元也必须依赖于其他单元,那么针对这种情况,我们就这样来解决,B单元依赖于A单元,那我们就首先保证A单元是正确的,然后再写B单元,也就是说当一个单元依赖于其他单元时,我们首先保证被依赖单元的正确性,这一点是非常关键的
另外,因为单元测试中我们需要mock数据,每次手工mock是非常费精力的,因为每个单元测试都需要手工mock,所以我们建议用系统自带的mock工具来替我们做这件事,像oc里面有OCMockito这个工具