网站首页 > 技术文章 正文
应用程序上线之前如何进行有效的测试?今年的JAX London大会Gil Tayar向初学者介绍了前端测试的方法以及为什么测试码不可选的原因。以下是关于他对大会内容的部分介绍。
Gil Tayar:我的一位朋友曾经问我,前端测试到底应该怎样做。为了更加系统全面的回答他这个问题,我在网上查阅了大量的资料,但是却发现这些方法理论却差强人意,至少在我看来,这些方法的深度还远远不够。从前端测试新手的角度,我找不到全面指导前端测试指南的应用程序,更别说理论和实践的结合了,所以我决定自己来做这件事。
首先,什么是测试?
测试的含义在我看来就是你在APP中写的检测代码,也被称为“生产代码”,它是按照预期工作的。也有人称之为“TDD”,但” TDD” 一般指的是具体的测试方法。
其实不管在编程之前写代码还是之后这都无关紧要,只要你写出足够的测试能够让你的APP正常运行这就可以了。但令人悲哀的是,很多人都觉得这一点也不重要。
现在软件测试行业已经将测试与TDD相结合,因此程序员和生产代码一起编写代码没有标准术语。我称软件测试为“开发者测试”,或者你也可以这样理解,软件测试就是普通的测试而已。
为什么要测试?
其实测试没有什么必须的理由。如果你真的不想测试,肯定也没人强迫你。假如一次又一次的网页测试让你越来越烦躁,那就没有测试的必要。但是,如果你不测试,有些潜在的bug可能会在未来的时间里一次又一次的困扰你,从部署到生产都将会是一个噩梦。
测试类型有哪些?
对于初学者而言,刚开始研究各种类型测试的时候非常抓狂。你可能听过几个软件测试大概的类别:单元测试、验收测试、集成测试、端到端测试、组件测试以及服务测试。
更让人哭笑不得的是,假如一群软件测试的人在一起头脑风暴,他们对软件测试中的术语定义可能都不一样。
但对我而言不太在乎使用哪个术语,因为我认为测试类型没有硬性定义。在我看来,所有的测试其实都在一个频谱范围内。
测试类型的范围是什么?
我们从最简单的类型——单元测试开始。从定义来看,所谓单元测试就是测试“单位”的代码,那什么是单位呢?这就取决于你使用的编程语言了。单位可以是一个函数,一个模块,一个包,一个类,甚至是一个对象(相对于JavaScript和Scala这样的语言)。举个例子,在JavaScript中,单元通常就是指一个类或者一个模块。
重要的是这个单元要进行隔离测试,这些算法、功能就像一个函数、计算字符串中的字符数或者具有一组验证函数的类,这是非常完美的。
隔离测试还是比较容易的,因为单元与单元之间没有依赖性。但我如何知道一个单元和另一个单元是否依赖呢?两种方法:要么对两个单元同时测试,要么模拟另一个单元。
那么问题来了,如果我同时测量两个单元,还能称为“单元测试”吗?有些人会不再将它称为单元测试。但是我仍倾向于叫做“单元测试”。但是如果有人叫做“集成测试”或者“两单元测试”,那我没有任何意见。
举个例子:
这个单元是一个具有writeSumToFile功能的模块,它接受两个数字并且可以将他们直接写入文件中。
但是值得注意的是,它本身并没有被写出来。它使用另一个单元fileSumWriter来编写。为了测试这个单元,我们可以通过实际的文件编辑器或创建一个模拟来实现。
从最纯粹的意义上讲,如果将mock传递给函数,无疑这个测试就是一个单元测试。但是当它们一起测试时,很多人就会认为这不是单元测试。
其实这都无关紧要。一方面,我们有代码测试一个单位。另一方面,有E2E测试——整个应用的测试。一切测试都在E2E中进行,并且APP运行时会在与生产系统类似的环境中运行。
这代表着两个极端点——它们定义了越来越大的测试范围,在这个范围内,越来越多的代码被测试。
有些人称这些测试为处于“集成测试”之间的测试,但对于TDD-ers,集成测试意味着一个完全不同的东西。集成测试确切的说即使测试超过了一个单元但不包括所有的单元。
大多数人都认为有一个测试金字塔——其中包括许多单元测试、较少的集成测试以及少量的E2E测试。
- 上一篇: 探索更完整的前端测试策略 前端测试流程
- 下一篇: 前端精准测试实践 前端测试流程
猜你喜欢
- 2024-09-29 软件测试和前端开发哪个更有前途?
- 2024-09-29 如何实现前端实时通信(WebSocket等)
- 2024-09-29 前端测试的反模式 前端反调试
- 2024-09-29 js基本搜索算法实现与170万条数据下的性能测试
- 2024-09-29 前端页面的性能测试 前端页面测试方法
- 2024-09-29 前端安全究竟该怎么做?从一个安全漏洞说起......
- 2024-09-29 前端精准测试实践 前端测试流程
- 2024-09-29 探索更完整的前端测试策略 前端测试流程
你 发表评论:
欢迎- 最近发表
-
- 宇宙厂:深入聊聊 CJS 和 ESM 模块化三点核心差异?
- #前端高手进阶#一起薅羊毛~
- 前端基础进阶(十):深入详解函数的柯里化
- 2025 年 Object 和 Map 如何选择?
- 为何说 postMessage 才是真正的 setTimeout(0)?
- 为什么高手写 JS 总是又快又好?这10个技巧你要知道
- 2025 年 Deno 终于官宣 pnpm 和 Yarn 可使用 JSR?
- 宇宙厂:为什么前端要了解 Interaction to Next Paint (INP)
- Node.js 原生支持 TypeScript?开发者需要了解的一切
- 请务必用 postTask/isInputPending 释放JS主线程!
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端md5加密 (49)
- 前端路由 (55)
- 前端数组 (65)
- 前端定时器 (47)
- 前端接口 (46)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle约束 (46)
- oracle 中文 (51)
- oracle链接 (47)
- oracle的函数 (57)
- mac oracle (47)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)