热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JQuery团队打造的javascript单元测试工具QUnit介绍_jquery

元测试又称为模块测试,是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。单元测试主要是用来检验程式的内部逻辑,也称为个体测试、结构测试或逻辑驱动测试。通常由撰写程式码的程式设计师负责进行。
什么是单元测试?

单元测试又称为模块测试,是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。单元测试主要是用来检验程式的内部逻辑,也称为个体测试、结构测试或逻辑驱动测试。通常由撰写程式码的程式设计师负责进行。

通常来说,程式設計師每修改一次程式就會進行最少一次單元測試,在編寫程式的過程中前後很可能要進行多次單元測試,以證實程式達到軟件規格書(en:Specification)要求的工作目標,沒有臭蟲;雖然单元测试不是什么必须的,但也不坏,這牽涉到專案管理的政策決定。

—— 维基百科 (中文英文)

单元测试的优点

1、它是一种验证行为。
程序中的每一项功能都是测试来验证它的正确性。它为以后的开发提供支缓。就算是开发后期,我们也可以轻松的增加功能或更改程序结构,而不用担心这个过程中会破坏重要的东西。而且它为代码的重构提供了保障。这样,我们就可以更自由的对程序进行改进。

2、它是一种设计行为。
编写单元测试将使我们从调用者观察、思考。特别是先写测试(test-first),迫使我们把程序设计成易于调用和可测试的,即迫使我们解除软件中的耦合。

3、它是一种编写文档的行为。
单元测试是一种无价的文档,它是展示函数或类如何使用的最佳文档。这份文档是可编译、可运行的,并且它保持最新,永远与代码同步。

4、它具有回归性。
自动化的单元测试避免了代码出现回归,编写完成之后,可以随时随地的快速运行测试。

参考:

http://miiceic.org.cn/phrase/200602281036115.html href="http://miiceic.org.cn/phrase/200602281036115.html" target=_blank>http://miiceic.org.cn/phrase/200602281036115.html

http://tech.ddvip.com/2009-06/1245992965124860.html href="http://tech.ddvip.com/2009-06/1245992965124860.html" target=_blank>http://tech.ddvip.com/2009-06/1245992965124860.html

http://www.blogjava.net/square/articles/158103.html href="http://www.blogjava.net/square/articles/158103.html" target=_blank>http://www.blogjava.net/square/articles/158103.html

javscript中单元测试框架

  • jsUnit
    系统化的解决方案,基于XNuit规范,如果你会使用jUnit、NUnit等框架,对这个应该会很容易上手,且包括服务器端(Java的)。http://www.jsunit.net/
    评价:非常全面,专业,适合大型企业级开发。
  • Test.Simple & Test.More
    这个是jQuery之父John Resig在他的著作《Pro Javascript》中推荐的测试框架http://openjsan.org/doc/t/th/theory/Test/Simple/0.21/lib/Test/Simple.html
    评价:非常容易上手,非常简洁,适合中小型项目快速引入单元测试。
  • FireUnit
    这个是John Resig另起炉灶做的,在他的博客John Resig - FireUnit: Javascript Unit Testing Extension,发布了他与Jan Odvarko合作开发的基于Firebug的扩展FireUnit

    简单说来,FireUnit给Firebug增加了一个标签面板,并提供了一些简单的Javascript API来记录和查看测试。更多http://shawphy.com/2008/12/fireunit.html
    评价:里面有Test.Simple的痕迹,呵呵,John Resig是个非常善于学习并创新的家伙。FireUnit果然在易用性上表现非常出众,非常适合基于Firebug做调试环境的前端工程师。

  • QUnit
    QUnit是jQuery团队开发的Javascript单元测试工具,可以到http://docs.jquery.com/QUnit href="http://docs.jquery.com/QUnit" target=_blank>http://docs.jquery.com/QUnit中下载

    评价:使用方便,界面美观。

参考:
http://www.cnblogs.com/kaima/archive/2009/04/09/javascritp_unittest.html

下面我们重点来介绍一下QUnit

QUnit 介绍

Javascript 依然需要很好的可读性,所以重构也必不可少,我们知道没有单元测试的重构是不靠谱的,有好的单元测试覆盖会让我们重构时更容易成本也更低,所以对于优秀的Javascript编程人员来说非常需要单元测试框架,QUnit 是一款强大而且容易使用的Javascript 测试框架,它被用于jQuery 与其插件的测试,同时它也同样可以测试普通的Javascript 代码。

使用QUnit

首先我们先要http://docs.jquery.com/QUnit href="http://docs.jquery.com/QUnit" target=_blank>http://docs.jquery.com/QUnit中找到qunit.jsqunit.css两个文件,Qunit的框架如下:

代码如下:


"http://www.w3.org/TR/html4/loose.dtd">

QUnit example






    注:body中的元素id命名必须依照如下形式,否则无法正常显示,我们可以将要测试的内容放在$(document).ready()中。
    我们先来看一个简单的例子

    代码如下:


    "http://www.w3.org/TR/html4/loose.dtd%22>

    QUnit example






      将此文件存为html直接在本地运行,结果如下

      test( name, expected, test )加入测试去运行,其中可以包含若干断言函数,比方说ok,equals等。

      ok( state, [message] ) 是QUnit中常用的一个判断函数,可以判断布尔类型,整型非零为true,字符串非“”为true。
      equals( actual, expected, [message] ) 是QUnit中常用的一个判等函数
      我们再来看一个稍微复杂一点的例子:

      代码如下:

      QUnit example






        得到的结果:
        qunit2

        module( name, lifecycle ):是用于对测试模块进行分组,[lifecycle] 用于初始化测试和清理测试。

        参考如下实例:

        代码如下:


        module("module2", {
        setup: function() {
        ok(true, "once extra assert per test");
        this.testData = "foobar";
        },
        teardown: function() {
        ok(true, "and one extra assert after each test");
        }
        });
        test("test with setup and teardown", function() {
        expect(3);
        same(this.testData, "foobar");
        });


        异步测试:

        代码如下:


        codeasyncTest("异步测试", function() {
        expect(2);
        $.getJSON("/Home/JosnDemo", function(result) {
        equals(result.x, "sss");
        equals(result.y, "sss");
        start();
        });
        });


        "/Home/JosnDemo"是提供json数据的地址,这里需要注意的是必须在写完断言函数后调用start()函数。

        Qunit还提供了在测试时的一些更为高级的应用,比如希望在某个测试开始时做些工作等,可以参见http://docs.jquery.com/QUnit#Integration_into_Browser_Automation_Tools href="http://docs.jquery.com/QUnit#Integration_into_Browser_Automation_Tools" target=_blank>http://docs.jquery.com/QUnit#Integration_into_Browser_Automation_Tools

        JQuery的很多核心套件是使用Qunit来进行测试的,http://docs.jquery.com/QUnit#Reference_Test_Suites href="http://docs.jquery.com/QUnit#Reference_Test_Suites" target=_blank>http://docs.jquery.com/QUnit#Reference_Test_Suites中有很多的例子可以供大家参考。
        例子下载

        推荐阅读
        • Ihavethefollowingonhtml我在html上有以下内容<html><head><scriptsrc..3003_Tes ... [详细]
        • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
        • 本文介绍了Java后台Jsonp处理方法及其应用场景。首先解释了Jsonp是一个非官方的协议,它允许在服务器端通过Script tags返回至客户端,并通过javascript callback的形式实现跨域访问。然后介绍了JSON系统开发方法,它是一种面向数据结构的分析和设计方法,以活动为中心,将一连串的活动顺序组合成一个完整的工作进程。接着给出了一个客户端示例代码,使用了jQuery的ajax方法请求一个Jsonp数据。 ... [详细]
        • 本文介绍了使用jQuery实现图片预加载和等比例缩放的方法,同时提供了演示和相关代码。该方法可以重置图片的宽度和高度,并使图片在水平和垂直方向上居中显示。 ... [详细]
        • 本文介绍了DataTables插件的官方网站以及其基本特点和使用方法,包括分页处理、数据过滤、数据排序、数据类型检测、列宽度自动适应、CSS定制样式、隐藏列等功能。同时还介绍了其易用性、可扩展性和灵活性,以及国际化和动态创建表格的功能。此外,还提供了参数初始化和延迟加载的示例代码。 ... [详细]
        • 前言:关于跨域CORS1.没有跨域时,ajax默认是带cookie的2.跨域时,两种解决方案:1)服务器端在filter中配置详情:http:blog.csdn.netwzl002 ... [详细]
        • 表单提交前的最后验证:通常在表单提交前,我们必须确认用户是否都把必须填选的做了,如果没有,就不能被提交到服务器,这里我们用到表单的formname.submit()看演示,其实这个对于我们修炼道 ... [详细]
        • Iwouldliketobeabletohaveasidebarthatcanbetoggledinandoutonabuttonpress.However ... [详细]
        • ImgettingabugwithInternetExplorer.Theiframedoesnthavecorrectsizeanditisdisplayedo ... [详细]
        • 我试图制作一个进度条,如果还有更多内容仍被隐藏,则显示箭头。为了更清楚,我做 ... [详细]
        • Html5-Canvas实现简易的抽奖转盘效果
          本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
        • HTML5网页模板怎么加百度统计?
          本文介绍了如何在HTML5网页模板中加入百度统计,并对模板文件、css样式表、js插件库等内容进行了说明。同时还解答了关于HTML5网页模板的使用方法、表单提交、域名和空间的问题,并介绍了如何使用Visual Studio 2010创建HTML5模板。此外,还提到了使用Jquery编写美好的HTML5前端框架模板的方法,以及制作企业HTML5网站模板和支持HTML5的CMS。 ... [详细]
        • 本文介绍了如何使用jQuery和AJAX来实现动态更新两个div的方法。通过调用PHP文件并返回JSON字符串,可以将不同的文本分别插入到两个div中,从而实现页面的动态更新。 ... [详细]
        • 本文介绍了在Ubuntu下制作deb安装包及离线安装包的方法,通过备份/var/cache/apt/archives文件夹中的安装包,并建立包列表及依赖信息文件,添加本地源,更新源列表,可以在没有网络的情况下更新系统。同时提供了命令示例和资源下载链接。 ... [详细]
        • 本文介绍了如何在Jquery中通过元素的样式值获取元素,并将其赋值给一个变量。提供了5种解决方案供参考。 ... [详细]
        author-avatar
        mggwvga_84049035
        这个家伙很懒,什么也没留下!
        PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
        Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有