测试的剖析¶
简单来说,测试旨在查看特定行为的结果,并确保该结果与您期望的结果一致。 行为不是可以凭经验衡量的东西,这就是编写测试可能具有挑战性的原因。
“行为”是系统对特定情况和/或刺激 **做出反应** 的方式。 但是,究竟是如何或为什么完成某事并不像完成了什么那么重要。
您可以将测试视为分解为四个步骤
准备
执行
断言
清理
准备 是我们为测试准备一切的地方。 这几乎意味着除了“执行”之外的一切。 它是排列多米诺骨牌,以便 执行 可以在一个改变状态的步骤中完成它的工作。 这可能意味着准备对象、启动/停止服务、将记录输入数据库,甚至诸如定义要查询的 URL、为尚不存在的用户生成一些凭据,或者只是等待某些进程完成之类的事情。
执行 是启动我们要测试的 行为 的单一的、改变状态的操作。 这种行为是执行更改被测系统 (SUT) 状态的操作,我们可以查看由此产生的更改状态来判断行为。 这通常采用函数/方法调用的形式。
断言 是我们查看结果状态并检查它是否与我们期望的尘埃落定后的状态一致的地方。 在这里,我们收集证据来说明行为是否与我们期望的一致。 我们测试中的 assert
是我们进行测量/观察并对其应用判断的地方。 如果某物应该是绿色的,我们会说 assert thing == "green"
。
清理 是测试在自身之后进行清理的地方,因此其他测试不会被它意外地影响。
在其核心,测试最终是 执行 和 断言 步骤,而 准备 步骤仅提供上下文。 行为 存在于 执行 和 断言 之间。