JavaScript有这几种测试分类

原文:《What are Unit Testing, Integration Testing and Functional Testing?》https://blog.fundebug.com/2017/06/26/javascript-test-type/

为了保证可读性,本文采用意译而非直译。另外,本文版权归原作者所有,翻译仅用于学习

JavaScript代码测试有很多分类,比如单元测试(unit test)集成测试(integration test)功能测试(functional test)端到端测试(end to end test)回归测试(regression test)浏览器测试(browser test)

也许你会傻傻地分不清楚,它们是什么?如何使用?什么情况下使用?这篇博客将解答你的疑问。

单元测试

单元测试指的是测试小的代码块,通常指的是独立测试单个函数如果某个测试依赖于一些外部资源,比如网络或者数据库,那它就不是单元测试

单元测试一般很容易写。一个单元测试通常是这样的:为某个函数提供某些输入值,然后验证函数的返回值是否正确。然而,如果你的代码设计非常糟糕,则单元测试会很难写。从另一个角度理解,单元测试可以帮助我们写更好的代码。

从某种意义上,单元测试就是代码的骨干。通过单元测试,可以帮助你优化代码设计,可以保证修改代码时正确无误。

单元测试可以帮助我们避免一些常见的BUG。通常,程序员会在同一个细节上反复犯错,如果为这些BUG添加单元测试,则可以有效避免这种情况。当然,你也可以使用集成测试功能测试来解决这个问题,但是单元测试更加适合,因为单元测试更加细致,可以帮助我们快速定位和解决问题。

什么时候应该做单元测试呢?采用测试驱动开发(test driven development)的话,你应该一直写单元测试。好的单元测试不仅可以避免BUG,还可以优化代码,并且保证修改或者重构代码时不会出错

流行的JavaScript单元测试工具有Mocha, Jasmine和Tape。

集成测试

集成测试就是测试应用中不同模块如何集成,如何一起工作,这和它的名字一致。集成测试与单元测试相似,但是它们也有很大的不同:单元测试是测试每个独立的模块,而集成测试恰好相反。比如,当测试需要访问数据库的代码时,单元测试不会真的去访问数据库,而集成测试则会

单元测试不够时,这时就需要集成测试了。当你需要去验证两个独立的模块,比如数据库和应用,保证它们能够正确的一起工作,这时就需要集成测试了。为了验证测试结果,你就需要通过查询数据库验证数据正确性。

集成测试通常比单元测试慢,因为它更加复杂。并且,集成测试还需要配置测试环境,比如配置测试数据库或者其他依赖的组件。这就使得编写和维护集成测试更加困难,因此,你应该专注于单元测试,除非你真的需要集成测试。

你需要的集成测试应该少于单元测试。除非你需要测试多个模块,或者你的代码太复杂时,你才需要集成测试。并且,当你的代码过于复杂时,我建议优化代码以便进行单元测试,而不是直接写集成测试。

通常,我们可以使用单元测试工具编写集成测试。

功能测试

功能测试有时候也被称作端到端测试,或者浏览器测试,它们指的是同一件事。

功能测试指的是测试应用的某个完整的功能。对于网页应用,功能测试意味着使用工具模拟浏览器,然后通过点击页面来测试应用。

单元测试可以测试单个函数,集成测试可以测试两个模块一起工作。功能测试则完全是另外一个层次。你可以有上百个单元测试,但是通常你只有少量的功能测试。这是因为功能测试太复杂了,难于编写和维护。功能测试很慢,因为它需要模拟真实用户进行网页交互。

事实上,你不需要编写非常详细的功能测试。功能测试并不意味着你需要测试每一个功能,其实,你只需要测试一些常见的用户行为。如果你需要在浏览器中手动测试应用的某个流程,比如注册账号,这时你可以编写一个功能测试。

对于单元测试,你会使用代码去验证结果,在功能测试中也应该这样做。以注册账号为例,你可以验证浏览器是否跳转到了”感谢注册”页面。

当有些测试你需要手动在浏览器下重复进行时,你应该编写功能测试。注意不要写得太细致了,否则维护这些测试将是一个噩梦。

最流行的功能测试工具是 Selenium。Selenium WebDriver或者Protractor通常与Selenium一起使用,有时也使用PhantomJS和CasperJS,注意你不需要使用真实浏览器。

总结

测试JavaScript代码时,应该着重于单元测试,它非常容易编写和维护,除了可以减少BUG还有很多益处。而集成测试与功能测试应该作为补充。

转自:https://blog.fundebug.com/2017/06/26/javascript-test-type/

本文来自企鹅号 - 我是测试经理媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT 指南者专栏

基于 Hexo + GitHub Pages 搭建个人博客(三)

打开 themes 目录下的 next 主题配置文件,找到 Wechat Subscriber 标签,将该标签下的配置改成如下形式:

50740
来自专栏Fred Liang

Service Worker 实现 web 应用消息推送

Service Worker 是事件驱动的 worker,生命周期与页面无关,关联页面未关闭时,它也可以退出,没有关联页面时,它也可以启动.

73420
来自专栏网络

强大的开源网络侦查工具:IVRE

IVRE简介 IVRE(又名DRUNK)是一款开源的网络侦查框架工具,IVRE使用Nmap、Zmap进行主动网络探测、使用Bro、P0f等进行网络流量被动分析,...

41270
来自专栏CodingBlock

Mac下搭建Eclipse Android开发环境

  之前一直是用windows搞android开发,但windows这个性能也真是让人醉了,终于一狠心,砸锅卖铁买了Mac。然后就开始在Mac上搭建androi...

415100
来自专栏北京马哥教育

关于IO的同步,异步,阻塞,非阻塞

上次写了一篇文章:Unix IO 模型学习。恰巧在这次周会的时候,@fp1203 (goldendoc成员之一) 正好在讲解poll和epoll的底层实现。中途...

318100
来自专栏小怪聊职场

安全|常见的Web攻击手段之XSS攻击

31750
来自专栏代码GG之家

搭建安卓系统源代码编译环境

今天分享下月亮大神整理的,android源码环境搭建,让开始学习android的同学,可以少走弯路,快速上手。 安卓源码编译环境搭建教程: 1.打造自己的And...

45580
来自专栏逢魔安全实验室

某IOT蠕虫病毒分析之UPX脱壳实战

? ? 关于upx的脱壳的文章比较多,基本上都是Windows平台下的脱壳文章,处理起来比较简单。FormSec将在本文中分析一款mips下病毒程序使用的u...

44740
来自专栏pythonlove

I/O模型

目前我们网络所面临的依然是高并发的问题,就像某cat双11时的情况,瞬间的并发量是惊人的,当然我们会有很多种方法去解决这个问题,本文我们谈论的是单台服务器,如何...

12820
来自专栏北京马哥教育

8分钟带你深入浅出搞懂Nginx

Nginx是一款轻量级的Web服务器、反向代理服务器,由于它的内存占用少,启动极快,高并发能力强,在互联网项目中广泛应用。 ? 架构图 上图基本上说明了当下流...

46170

扫码关注云+社区

领取腾讯云代金券