测试剖析

Anatomy of a test

简单来说,测试旨在查看特定行为的结果,并确保该结果与预期一致。 行为不是可以通过经验测量的,这就是为什么编写测试可能具有挑战性的原因。

“行为” 是指某个系统 对特定情况和/或刺激的反应 的方式。但究竟 如何为什么 做某件事并不如 做了什么 那么重要。

你可以将测试分为四个步骤:

  1. 准备

  2. 执行

  3. 断言

  4. 清理

准备 是为我们的测试准备一切的地方。这几乎意味着除“执行”之外的所有内容。就像排好多米诺骨牌,以便“执行”可以在一个状态改变的步骤中发挥作用。这可能意味着准备对象、启动/终止服务、在数据库中输入记录,甚至定义查询的 URL、为尚不存在的用户生成一些凭据,或者等待某个进程完成。

执行 是启动我们要测试的 行为 的单一状态改变操作。这个行为是执行被测系统(SUT)状态变化的操作,而我们可以查看的结果状态变化就是我们用来判断行为的依据。这通常以函数/方法调用的形式出现。

断言 是我们查看结果状态并检查其在尘埃落定后是否如预期的地方。这里我们收集证据,判断行为是否符合我们的预期。在测试中的 assert 是我们对该测量/观察进行判断的地方。如果某个事物应该是绿色的,我们会说 assert thing == "green"

清理 是测试自我收拾的地方,以便其他测试不被其意外影响。

从本质上讲,测试最终是 执行断言 步骤,而 准备 步骤只是提供上下文。 行为 存在于 执行断言 之间。