基本介绍
定义
单元测试是验证 指定输⼊ 的 实际结果 是否与 预期结果 匹配的测试。
接入单元测试的目的
单元测试的好处
-
提升代码的稳定性,保证代码的逻辑和边界均可覆盖
-
自动化测试,利于自测与重构测试
-
促进代码设计,让代码有明确的输入输出、各个层级间功能清晰
单元测试的问题点
-
部分情况会导致总开发时间更长
-
功能更新,单元测试代码必须同步更新
核心概念
-
主体:通常为公共类的 public 方法,也即业务流程中的一个流程节点;
-
目的:验证流程节点的处理结果是否与预期结果匹配;
-
关注点:指定输入、预期结果、实际结果,不应关注测试对象任何内部流程、任何内部细节
-
用例个数:需覆盖输入与输出产生绝大部分的组合,并非一个测试主体一个用例的简单对应关系
输入集、预期结果
-
输入集:测试主体所有可能的输入集合类型,囊括正常输入、异常输入。输入集中多数输入在第一次编写流程节点的单元测试代码时确立,少数(多为异常输入)在后续迭代中伴随故障的产生而补充入输入集;
-
预期结果:将预设的输入在 特定场景 下输入到流程节点后,期望得到的结果。预期结果可能是状态、单个行为、行为链,原则上预期结果不会是私有的状态、行为(private方法调用)。
-
原则:输入与预期结果一一对应,有输入必有结果反馈;(这也就反射要求代码设计让有明确的分层和输入输出)
测试分类
按照预期结果的种类,可将单元测试分为两大类:
-
状态测试:预期结果多为返回值、测试主体所在类暴露在外的成员变量。
-
行为测试:预期结果多为特定行为(链),具体来说是其他 public 方法的调用:
-
- 内部行为:为了防止内部嵌套测试的出现,对 public 做单元测试时方法内部其他的public方法,亦可作为预期结果;
-
- 异常行为:异常输入产生异常结果,异常结果可能是抛出