JavaScript有这几种测试分类

译者按: 也许你讨厌测试,但是你不得不面对它,所以至少区分一下单元测试、集成测试与功能测试?对吧…

原文: What are Unit Testing, Integration Testing and Functional Testing?

译者: Fundebug

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

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

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

单元测试

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

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

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

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

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

流行的JavaScript单元测试工具有Mocha, JasmineTape

集成测试

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

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

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

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

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

功能测试

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

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

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

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

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

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

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

总结

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

欢迎加入我们Fundebug全栈BUG监控交流群: 622902485

版权声明:
转载时请注明作者Fundebug以及本文地址:
https://blog.fundebug.com/2017/06/26/javascript-test-type/
时间: 2024-08-01 19:40:11

JavaScript有这几种测试分类的相关文章

JavaScript有这几种测试

译者按: 也许你讨厌测试,但是你不得不面对它,所以至少区分一下单元测试.集成测试与功能测试?对吧... 原文: What are Unit Testing, Integration Testing and Functional Testing? 译者: Fundebug为了保证可读性,本文采用意译而非直译.另外,本文版权归原作者所有,翻译仅用于学习. JavaScript代码测试有很多分类,比如单元测试(unit test).集成测试(integration test).功能测试(functio

JavaScript 面向对象的几种实现方法

JavaScript面向对象的几种实现方法 工厂模式 1 function createBlog(name, url) { 2 var o = new Object(); 3 o.name = name; 4 o.url = url; 5 o.sayUrl= function() { 6 alert(this.url); 7 } 8 return o; 9 } 10 var blog1 = createBlog('wuyuchang', 'http://www.jb51.net/'); 优点:实

几种测试框架

这次随笔主要是关于三种测试框架:Junit,Qunit,Nunit框架 一:Junit 框架 JUnit是一个java语言的单元测试框架,它是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架.Junit测试是由程序员所测试,属于白盒测试范畴.因为程序员知道自己所写的东西是什么体系结构以及具体内容. Junit是一套框架,继承TestCase类,就可以用Junit进行自动测试了. JUnit是一个开放源代码的Java测试框架,用于编写和运行可重复的测试. 二:Qunit

软件测试之秘籍篇——测试分类【转】

有句话是这么说的:能动手就别哔哔,尤其是在工作节奏堪比跑马的今天,大家都推崇实干精神,能解决问题就好,去他的理论.但是无可否认的是,良好的理论素养无论是解决工作中遇到的问题,还是未来的职业发展,都帮助甚大.本文整理汇总了软件测试行业中常见的一些测试理论,供大家参考. 1.软件测试按照测试分类有:黑盒测试和白盒测试. 黑盒测试 黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用.在测试中,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,

Gluon炼丹(Kaggle 120种狗分类,迁移学习加双模型融合)

http://www.cnblogs.com/fiercex/p/7927804.html fiercex 路漫漫其修远兮,吾将上下而求索 Gluon炼丹(Kaggle 120种狗分类,迁移学习加双模型融合) 这是在kaggle上的一个练习比赛,使用的是ImageNet数据集的子集.注意,mxnet版本要高于0.12.1b2017112.下载数据集. train.zip test.zip labels然后解压在data文件夹下 1. 数据 1.1 整理数据 将解压后的数据整理成Gluon能够读取

软件测试-测试分类

软件测试-测试分类一.按软件测试阶段:a. 单元测试b. 集成测试c. 系统测试d. 验收测试1.单元测试单元测试的原则: 1.尽可能保证部没测测试用例相互独立 2.一般由代码的编写人员来实施 单元测试的优点: 1.能尽早发现缺陷 2.有利于重构 3.可以简化集成 单元测试的缺陷 1.不可能穷尽测试,即测试用例不可能覆盖所有的执行路径,不可能捕捉到所有的错误 2.每一行代码需要3-5行测试代码来完成测试 单元测试框架 xUnit,比如:JUnit 例:eclipse->new->Java pr

实现一个函数clone,使JavaScript中的5种主要的数据类型(包括Number、String、Object、Array、Boolean)进行值复制

实现一个函数clone,可以对JavaScript中的5种主要的数据类型(包括Number.String.Object.Array.Boolean)进行值复制. 1 /** 对象克隆 2 * 支持基本数据类型及对象 3 * 递归方法 */ 4 function clone(obj) { 5 var o; 6 switch (typeof obj) { 7 case "undefined": 8 break; 9 case "string": o = obj + &q

JavaScript中的三种弹出对话框

JavaScript中的三种弹出对话框 *****本文来自互联网****** 学习过js的小伙伴会发现,我们在一些实例中用到了alert()方法.prompt()方法.prompt()方法,他们都是在屏幕上弹出一个对话框,并且在上面显示括号内的内容,使用这种方法使得页面的交互性更精彩,实际上我们经常会在进行网页浏览时简单这种类型的对话框,在用户与应用程序进行双向交流时,经常要用到对话框.avascript的三种对话框是通过调用window对象的三个方法alert(),confirm()和prom

面向面试编程——javascript继承的6种方法

javascript继承的6种方法 1,原型链继承 2,借用构造函数继承 3,组合继承(原型+借用构造) 4,原型式继承 5,寄生式继承 6,寄生组合式继承 1.原型链继承. <script type="text/javascript"> function Person(name,sex) { this.name=name; this.sex=sex; this.friends=['李四']; this.getName=function(){ alert(this.name