测试的解剖

用最简单的话说,测试的目的是查看特定行为的结果,并确保结果与您所期望的一致。行为是无法通过经验测量的,这就是为什么编写测试具有挑战性。

“Behavior” 是一些系统对特定情况和/或刺激作出反应的方式。但“怎样”或“为什么”做某事并不像“做了什么”那么重要。

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

  1. Arrange

  2. Act

  3. Assert

  4. Cleanup

Arrange 是我们为考试准备一切的地方。这意味着除了 “act” 之外的几乎所有东西。它是在排列多米诺骨牌,这样 act 就可以在一个改变状态的步骤中完成它的事情。这可能意味着准备对象、启动/终止服务、将记录输入数据库,甚至定义要查询的 URL、为还不存在的用户生成一些凭证,或者只是等待某个进程完成。

Act 是启动我们想要测试的 behavior 的单一的、改变状态的动作。此行为执行了被测系统(system under test,简称 SUT)状态的更改,我们可以通过查看更改后的状态来对该行为做出判断。这通常采用函数/方法调用的形式。

Assert 是我们查看结果状态的地方,并在尘埃落定后检查它是否像我们预期的那样。这是我们收集证据的地方,表明行为是否符合我们的预期。如果某个东西应该是绿色的,我们会说 assert thing == "green"

Cleanup 是测试在自己之后进行清理,这样其他测试就不会意外地受到它的影响。

在其核心,测试最终是 actassert 步骤,而 arrange 步骤只提供上下文。Behavior 存在于 actassert 之间。