该示例移动了设置部分的断言所使用的值,以避免在测试的逻辑中使用这些值。
QUnit 还通过 asyncTest() 函数提供对异步测试的支持,如果您使用 Asynchronous JavaScript and XML (Ajax),这是非常有用的特性。在这样的环境中,expect() 函数可以让你轻松地验证测试中运行的断言数量。
回页首
YUI Test:独立的单元测试模块
YUI Test 是 YUI 库(Yahoo!)的一个组件,是一个可扩展而完整的单元测试框架。如果要使用 YUI Test,需要:
将 YUI 导入 HTML 运行程序,如下所示。
<script src="http://yui.yahooapis.com/3.4.1/build/yui/yui-min.js"></script> |
如以上代码所示,此样例使用了 YUI Test 第 3 版本。
在测试脚本文件中,实例化 YUI 函数。加载所需的模块,test 和 console,如清单 11 所示。
清单 11.下载 test 和 console YUI 模块
YUI().use("test", "console", function (Y) { // Test cases go here }); |
test 模块显然是用于测试的。console 模块并不是强制性的,但本示例将用它来打印结果。测试用例将会进入回调中,并以全局的 Y 实例作为参数。
YUI Test 使用 Y.Test.Case() 构造函数实例化新测试用例,使用 Y.Test.Suite() 构造函数来实例化测试套件。测试套件与 JUnit 类似,包含若干个测试用例。可以使用 add() 方法将测试用例添加到测试套件中。
我们使用 YUI test 重新测试 清单 5 中的源代码。清单 12 显示了如何创建测试用的套件和测试用例。
清单 12. 测试套件和用例
YUI().use("test", "console", function (Y) { var suite = new Y.Test.Suite("Temperature conversion suite"); //add a test case suite.add(new Y.Test.Case({ name:"Temperature conversion? )); }); |
清单 12 生成了一个名为 Temperature conversion suite 的套件和一个名为 Temperature conversion 的测试用例。现在,可以将测试方法写入对象文本中,作为参数传递给 Y.Test.Case 构造函数,如清单 13 所示。
清单 13. 测试用例与测试方法
suite.add(new Y.Test.Case({ name:"Temperature conversion", setUp : function () { this.celsius1 = 20; this.celsius2 = 30; this.fahrenheit1 = 68; this.fahrenheit2 = 86; }, testConversionCtoF: function () { Y.Assert.areEqual(this.fahrenheit1, convertFromCelsiusToFahrenheit(this.celsius1)); Y.Assert.areEqual(this.fahrenheit2, convertFromCelsiusToFahrenheit(this.celsius2)); }, testConversionFtoC: function () { Y.Assert.areEqual(this.celsius1, convertFromFahrenheitToCelsius(this.fahrenheit1)); Y.Assert.areEqual(this.celsius2, convertFromFahrenheitToCelsius(this.fahrenheit2)); } })); |
您可能注意到,在清单 13 中:
可使用 setUp() 方法。YUI Test 在测试用例和测试套件层提供了 setUp() 和 tearDown() 方法。
测试方法名以 test 单词开头,它们包含断言。
本示例使用 Y.Assert.areEqual() 断言类型,它与 QUnit 中的 equal() 函数类似。
YUI Test 为断言提供了多种方法,如:
Y.Assert.areSame(),它类似于 QUnit 中的 strictEqual()。
数据类型断言(Y.Assert.isArray()、Y.Assert.isBoolean()、Y.Assert.isNumber() 等等)。
特殊值断言(Y.Assert.isFalse()、Y.Assert.isNaN()、Y.Assert.isNull() 等等)。
要启动 YUI 中的测试,需要使用 Y.Test.Runner 对象。还需要将套件或测试用例添加到对象中,然后调用 run() 方法来运行测试。清单 14 显示了如何运行 清单 13 中创建的测试。
清单 14. 运行 YUI test
Y.Test.Runner.add(suite); Y.Test.Runner.run(); |
在默认情况下,结果会打印在浏览器的控制台中(如果浏览器支持控制台的话)。更好的方法是使用 Yahoo! Console 组件来打印结果。如果要使用 Yahoo! Console 组件,需要采用 Y.Console 构造函数将控制台绑定到 HTML 运行程序的 DOM 元素中,如清单 15 所示。
清单 15. Yahoo! Console
var console = new Y.Console({ verbose: true, newestOnTop: false, width:"600px" }); console.render('#testLogger'); |