1 min read

我们为什么写测试

我曾在失控的 CSS 里讲到代码信任问题。

样式 B 基于 A 的存在,如果 A 不存在,B 也就被破坏。

但样式很难测试,所以我们要使用约定。约定好了,就不要变;如果有人撕毁了约定,代码质量就会跟台风天的危楼一样。

回到 JavaScript,假定有一个简单的加法函数:

function sum (a, b) {
  return a + b
}

我们可以测试,1 + 1 = 2:

assert.equal(sum(1, 1), 2)

在 1 + 1 = 2 的设定下,我们可以推出:

1 + 2 = 3

2 * 3 = 6

这十分显然。

可是,如果有人撕毁了 1 + 1 = 2 这个设定,并且我们并不知情,会怎样?

我们所有的函数、表达式都会“异常”,我们会一头茫然,甚至砸掉电脑。

但这时,再来跑一遍测试:

assert.equal(sum(1, 1), 2)

测试结果会告诉我们,1 + 1 != 2,我们就知道,有人撕毁了约定。

我们无妨把测试看成一种承诺:我承诺此时以及未来,一加一都会等于二,你可以安心地在这个承诺基础上做事。如果没有测试,我们就无法知晓,过去的自己或别人是否承诺了什么,现在又是怎样的情况。

报告问题 修订

如果你有自建 https 代理的需求,欢迎尝试 Phantom,一键搭建,方便快捷。查看 demo