开源的单元测试工具Qunit
接下来,介绍另外一款开源的单元测试工具Qunit(下载地址:http://code.jquery.com/qunit),它是完全基于浏览器运行的,因此不需要象jsTestDriver那么安装麻烦,而且值得一提的是,这个框架是jQuery的单元测试Javascript框架,功能十分强大。下面是安装方法:
1) 只需要下载qunit.js(http://code.jquery.com/qunit/qunit-git.js)和qunit.css(http://code.jquery.com/qunit/qunit-git.css)
广州网站建设,网站建设,广州网页设计,广州网站设计
2) 我们需要编写一个Qunit的界面,命名为testrunner.html,代码如下:
- <DOCTYPE html>
- <html>
- <head>
- <script src="http://code.jquery.com/jquery-1.6.4.min.js" type="text/javascript"></script>
- <script src="qunit.js" type="text/javascript"></script>
- <link rel="stylesheet" media="all" href="qunit.css" />
- <script src="src/mystuff.js" type="text/javascript"></script>
- <script src="src-test/mystuff_qunit.js" type="text/javascript"></script>
- </head>
- <body>
- <h1 id="qunit-header">MyStuff</h1>
- <h2 id="qunit-banner"></h2>
- <h2 id="qunit-userAgent"></h2>
- <ol id="qunit-tests"></ol>
- </body>
- </html>
这个页面中分别引入了jquery类库,qunit的类库,还有就是我们之前编写的,位于Src目录下的原先的javascript脚本mystuff.js,以及位于src-test目录下的测试用例Mystuff_qunit.js。
广州网站建设,网站建设,广州网页设计,广州网站设计
接下来,来看下测试用例文件Mystuff_qunit.js,代码如下:
- module("Sample Test Case");
- test("Number plus Zero Equals Number", function(){
- var adder = new myAwesomeApp.MyAwesomeClass();
- equals( adder.add(5,0),5);
- });
- test("Number plus Number Equals Sum", function(){
- var adder = new myAwesomeApp.MyAwesomeClass();
- equals(adder.add(5,3),8);
- });
- test("Zero plus Number Equals Number", function(){
- var adder = new myAwesomeApp.MyAwesomeClass();
- equals(adder.add(0,5),5);
- });
- test("Number plus Negative of Number Equals Zero", function(){
- var adder = new myAwesomeApp.MyAwesomeClass();
- equals(adder.add(5,-5),0);
- });
- test("Fails miserably", function(){
- ok(false,"miserably");
- });
这个看上去跟jsTestDriver有点象,但注意的是在断言方法中,参数的顺序不同,即在qunit中,断言的参数顺序为:Qunit.equals(actual, expected),即实际的数值。在前面,而期望的数值在后面,这点请注意。最后,直接在浏览器中运行test.html,可以看到效果如下:

其中,红色部分即时表示没能通过的单元测试。
整合jsTestDriver和Qunit
由于jsTestDriver和Qunit各有优势,因此我们可以考虑对其进行整合。比如,我们可以将jsTestDriver编写的脚本移植到Qunit中去,由于它们的断言参数顺序有不同,因此可以修改一下,编写名为jsTestDriverInQunit.js的脚本如下:
- function TestCase(name, tests){
- if(tests != null)
- module(name);
- for(var key in tests){
- if(tests[key] instanceof Function && key.indexOf("test") == 0){
- test(key,tests[key]);
- }
- }
- return function(){};
- }
- function assertEquals(arg0,arg1){
- equals(arg1,arg0);
- }
- function fail(msg){
- ok(false,msg);
- }
并且将testrunner.html修改如下:
- <DOCTYPE html>
- <html>
- <head>
- <script src="http://code.jquery.com/jquery-1.6.4.min.js" type="text/javascript"></script>
- <script src="qunit.js" type="text/javascript"></script>
- <script src="jsTestDriverInQunit.js" type="text/javascript"></script>
- <link rel="stylesheet" media="all" href="qunit.css" />
- <script src="src/mystuff.js" type="text/javascript"></script>
- <script src="src-test/mystuff.js" type="text/javascript"></script>
- </head>
- <body>
- <h1 id="qunit-header">MyStuff</h1>
- <h2 id="qunit-banner"></h2>
- <h2 id="qunit-userAgent"></h2>
- <ol id="qunit-tests"></ol>
- </body>
- </html>
此外,还有一个开源项目提供了将Qunit转化为jsTestDriver的功能,项目地址为:
http://code.google.com/p/js-test-driver/wiki/QUnitAdapter。
原文:http://tech.it168.com/a2011/1019/1260/000001260942_all.shtml