单元测试的意义是什么

发布于 2022-09-11 23:24:40 字数 188 浏览 21 评论 0

比如一个函数,接收两个数字作为入参,该函数会对两个数值向下取整并相加,然后输出该结果。假设该函数书写时把向下取整写成了向上取整,因此输入1.2和2.2输出了5

现在对于这个函数做单元测试,等于把上述逻辑在单元测试的代码里又写了一遍,逻辑依然是错的,单元测试输出结果和函数输出结果都是5,单元测试通过

所以不大理解单元测试的意义在哪

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

故人爱我别走 2022-09-18 23:24:40

我说几点
比如对于下面的函数:

function add(numA, numB){
    numA = Math.max(numA, 0)
    numB = Math.min(numB, 0)
    return numA + numB
}

我们看看需要考虑几种情况:

numAnumB
11
>=0<0
<0>=0
>=0>=0
......

此外,是否我们还需要考虑 numA 和 numB 的类型呢?
此时,如果需要添加一个需求,要求在 =0 的时候做特殊操作,请问:

  1. 修改了这个函数是否会影响函数执行的结果呢?那么这几种情况都需要尝试一遍。
  2. 这个函数的影响面多大,换句话说,会不会影响上层的调用方呢?

所谓的单元测试是考虑一个函数所有的情况,任何一次修改也会重新在所有情况之下修改,而这些所有情况就覆盖了上层的所有调用。这个函数单元测试过了,就说明不影响上层功能。

按照你的说法,结果不变的确不影响。但是单元测试不是一个单元一个测试,而是一个单元无限的测试。所以你的这种情况是单元测试覆盖不够,除了要测试 1.2 和 2.2,还需要考虑 1.9 和 2.9,等等等。

所以吧,大概有以下优点:

  1. 写一个函数,考虑所有情况,一次测试所有情况。
  2. 修改函数功能,更新单元测试,一次测试更多的情况,单测覆盖面越来越广,避免引入新功能导致旧的功能出 bug。
  3. 单元测试层层覆盖,定位快,从顶层到底层,单测覆盖面越广,项目质量越稳定,每一次修改代码,跑一边测试,就能保证不影响旧功能。
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文