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