什么是单元测试?
单元测试又称为模块测试,是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。单元测试主要是用来检验程式的内部逻辑,也称为个体测试、结构测试或逻辑驱动测试。通常由撰写程式码的程式设计师负责进行。
通常来说,程式設計師每修改一次程式就會進行最少一次單元測試,在編寫程式的過程中前後很可能要進行多次單元測試,以證實程式達到軟件規格書(en:Specification)要求的工作目標,沒有臭蟲;雖然单元测试不是什么必须的,但也不坏,這牽涉到專案管理的政策決定。
—— 维基百科 (中文,英文)
单元测试的优点
1、它是一种验证行为。
程序中的每一项功能都是测试来验证它的正确性。它为以后的开发提供支缓。就算是开发后期,我们也可以轻松的增加功能或更改程序结构,而不用担心这个过程中会破坏重要的东西。而且它为代码的重构提供了保障。这样,我们就可以更自由的对程序进行改进。
2、它是一种设计行为。
编写单元测试将使我们从调用者观察、思考。特别是先写测试(test-first),迫使我们把程序设计成易于调用和可测试的,即迫使我们解除软件中的耦合。
3、它是一种编写文档的行为。
单元测试是一种无价的文档,它是展示函数或类如何使用的最佳文档。这份文档是可编译、可运行的,并且它保持最新,永远与代码同步。
4、它具有回归性。
自动化的单元测试避免了代码出现回归,编写完成之后,可以随时随地的快速运行测试。
参考:
http://miiceic.org.cn/phrase/200602281036115.html
http://tech.ddvip.com/2009-06/1245992965124860.html
http://www.blogjava.net/square/articles/158103.html
javscript中单元测试框架
参考:
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中找到qunit.js 和 qunit.css两个文件,Qunit的框架如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<link rel="stylesheet" href="qunit.css" type="text/css" media="screen" />
<script type="text/javascript" src="qunit.js" ></script>
<script>
$(document).ready(function() {
});
</script>
</head>
<body>
<h1 id="qunit-header">QUnit example</h1>
<h2 id="qunit-banner"></h2>
<h2 id="qunit-userAgent"></h2>
<ol id="qunit-tests"></ol>
</body>
</html>
注:body中的元素id命名必须依照如下形式,否则无法正常显示,我们可以将要测试的内容放在$(document).ready()中。
我们先来看一个简单的例子
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd%22>
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js%22></script>
<link rel="stylesheet" href="qunit.css" type="text/css" media="screen" />
<script type="text/javascript" src="qunit.js" ></script>
<script>
$(document).ready(function() {
test("一个基本测试例子", function() {
ok( true, "测试布尔类型" );
var value = "hello";
equals( "hello", value, "我们期望得到hello" );
});
});
</script>
</head>
<body>
<h1 id="qunit-header">QUnit example</h1>
<h2 id="qunit-banner"></h2>
<h2 id="qunit-userAgent"></h2>
<ol id="qunit-tests"></ol>
</body>
</html>
我们再来看一个稍微复杂一点的例子:
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<link rel="stylesheet" href="qunit.css" type="text/css" media="screen" />
<script type="text/javascript" src="qunit.js"></script>
<script>
$(document).ready(function() {
test("a basic test example", function() {
ok(true, "this test is fine");
var value = "hello";
equals("hello", value, "We expect value to be hello");
});
module("Module A");
test("first test within module", function() {
ok(true, "all pass");
});
test("second test within module", function() {
ok(true, "all pass");
});
module("Module B");
test("some other test", function() {
expect(2);
equals(true, false, "failing test");
equals(true, true, "passing test");
});
});
</script>
</head>
<body>
<h1 id="qunit-header">QUnit example</h1>
<h2 id="qunit-banner"></h2>
<h2 id="qunit-userAgent"></h2>
<ol id="qunit-tests"></ol>
</body>
</html>
得到的结果:
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");
});
异步测试:
asyncTest("异步测试", 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
JQuery的很多核心套件是使用Qunit来进行测试的,http://docs.jquery.com/QUnit#Reference_Test_Suites中有很多的例子可以供大家参考。
例子下载
相关推荐
它由 jQuery 项目开发团队创建,因此对于 jQuery 生态系统来说,它是理想的测试工具,但同时也适用于任何其他 JavaScript 代码库。QUnit 提供了一种结构化的方式来编写和执行单元测试,确保代码的正确性,避免在开发...
QUnit 是一个专门用于 JavaScript 代码的单元测试框架,由 jQuery 团队成员创建,同时也是 jQuery 的官方测试工具。虽然最初与 jQuery 相关,但 QUnit 可以应用于任何普通的 JavaScript 代码,甚至支持在服务器端 ...
如果没有一款合适的单元测试工具保证前端单元模块的正确功能,对后期的代码调试和维护会造成很大的麻烦,今天就介绍一款单元测试框架 — Qunit Qunit刚开始属于jQuery项目,专门用于测试jQuery单元模块。现在已经从...
QUnit是一款由jQuery项目团队开发的强大、易用的JavaScript单元测试框架。它专为浏览器环境设计,适用于测试任何JavaScript代码,无论是在浏览器原生环境中,还是在基于jQuery或其他库的项目中。QUnit提供了一套全面...
QUnit 是一个强大的JavaScript单元测试框架,主要用于JavaScript代码的质量保证和功能验证。它是由jQuery项目的开发者设计和维护的,因此特别适合于测试基于jQuery的代码,但同样适用于任何JavaScript环境。QUnit...
JavaScript单元测试工具概述 在软件开发中,单元测试是一种确保代码质量的重要手段。随着Web应用程序客户端的兴起,对JavaScript进行单元测试变得尤为必要。本文将概述使用QUnit、YUI Test和JSTestDriver等工具对...
QUnit是一款广泛应用于JavaScript开发中的单元测试框架,它是由jQuery项目的开发者们创建并维护的,旨在为JavaScript代码提供详尽的测试覆盖率。QUnit以其简洁的API和良好的可读性,成为了前端开发者进行代码质量...
QUnit 是一个强大的JavaScript单元测试框架,主要用于测试jQuery、jQuery UI、jQuery Mobile等JavaScript库以及任何其他基于JavaScript的代码。QUnit 1.5 版本是该框架的一个早期版本,尽管现在已经有更新的版本发布...
QUnit 是一个由 jQuery 团队开发的JavaScript单元测试框架,专为JavaScript代码的调试和测试设计。作为jQuery的官方测试工具,QUnit不仅适用于测试jQuery库本身,还能广泛应用于任何常规JavaScript代码,甚至能够在...
- QUnit:是jQuery项目的一部分,也是一个轻量级的JavaScript单元测试框架。QUnit的界面简单直观,易于学习,它提供了断言、设置和拆解钩子,以及测试运行的结果展示。 - JsTestDriver:是Google推出的一个...
QUnit是jQuery项目团队开发的一个强大的JavaScript单元测试框架,适用于JS和JQ的单元测试。 QUnit提供了丰富的断言库,帮助测试人员检查代码的输出是否正确。这些断言包括`equal`、`notEqual`、`strictEqual`、`...
而 `QUnit` 是一个强大的JavaScript单元测试框架,源自jQuery项目,广泛用于确保代码质量。 `gulp-qunit-harness` 是一个专为 `gulp` 设计的插件,它整合了 `QUnit` 的功能,使得在本地和实验室环境中运行 `QUnit` ...
QUnit 是一个由 jQuery 项目团队开发的开源 JavaScript 测试框架,专门用于进行单元测试。它为开发者提供了一套强大的工具,确保前端代码的质量和稳定性,尤其在复杂项目的开发过程中,QUnit 的应用能够显著提高代码...
QUnit 是一个强大的JavaScript单元测试框架,由jQuery项目团队开发,广泛应用于JavaScript代码的质量保证。而 QUnit Harness 则是 QUnit 的一个重要补充,它提供了方便的工具和方法,让测试过程更加顺畅和自动化。 ...
而QUnit是jQuery项目开发的一个开源的JavaScript单元测试框架,它简单易用,支持异步测试,非常适合对JavaScript代码进行测试。Grunt则是一个JavaScript任务运行器,能够自动化构建过程,包括编译、压缩、测试等。 ...
1. 单元测试:对于功能测试源码,我们可以使用JUnit、QUnit等单元测试框架,对jQuery的各个函数进行测试,确保它们按照预期工作。 2. 性能测试:通过模拟大量DOM操作和事件处理,评估jQuery在不同场景下的性能表现...