什么是 Mock?
作为动词,Mock 是模拟、模仿的意思。
作为名词,Mock 是能够模仿真实对象行为的模拟对象。
那么,在软件测试中,Mock 所模拟的对象是什么呢?
模拟的是 SUT(System Under Test:被测系统) 的依赖,而不是其本身。
比如,我要测试 A,但 A 依赖 B,要模拟的对象就是 B。
为什么要模拟 B 呢?
提高 A 的测试覆盖率:通过 Mock 模拟 B 返回的正常和异常的结果,使用 A 的测试更充分。
避免 B 的因素对 A 产生影响:当 B 因各种原因无法正常使用时,导致 A 无法测试。
提高 A 的测试效率:B 的真实行为可能很慢,但模拟可以很快。
Mock 的两大功能:
记录真实的调用信息
生成模拟的返回信息
使用 Mock 的问题是什么?
可能导致问题遗漏:毕竟是模拟的,是理想可预见的情况,真实的情况可能更复杂。
可能导致维护成本变高:接口变更 Mock 用例要跟着改,改错和漏改都可能出问题。
常见的 Mock 类型:
方法级别:Mock的对象是一个函数调用,例如:获取系统环境变量。
类级别:Mock 的对象是一个类,例如