PandaJS 使用说明(1.9):编写测试
程序员文章站
2022-04-26 13:32:01
...
PandaJS 使用说明(1.9):编写测试
PanadaJS 的测试库是在 junit 3 的基础上修改而成的,界面上使用的是 swing,我已经将修改后的 junit 工程放在 svn 上了:
https://pandajs.googlecode.com/svn/trunk/junit/
接下来,就让我们为 scripts/app 目录下的文件编写测试吧。
编写测试案例(DBO)
与用 java 编写的 junit3 测试案例相似,PandaJS 的一个测试案例包含 setup(),tearDown(),和若干个 textXXX() 测试方法。同时,还需要一个获取案例名称的 name() 方法。
这些案例可以直接用 test(...) 执行,也可以将多个测试案例组成测试案例集后用 test(...) 执行。测试案例集是可以嵌套的。
以 dbo.users 的测试案例为例,在 setUp() 方法中进行清理和初始化,在 tearDwon 中再次进行清理,在 testXXX(...) 方法中执行调用测试的方法并使用 Assert 进行验证。
执行测试案例时,所有以 "test" 开头的方法都将被执行, setUp() 方法在每次执行 testXXX(...) 之前执行,tearDown(...) 方法在每次执行 testXXX(...) 之后执行。
Assert 的用法与 junit3 中是一样的。
主要代码如下:
scripts/test/app/dbo/users.js
// dbo.users 的测试案例 testDBOUsers = { // 测试案例的名称 name: function() { return "DBO Users Test"; }, // 每次执行测试方法之前都进行数据清理和初始化 // 清空测试数据库并插入新数据 setUp: function() { clear(); init(); }, // 每次执行测试方法之前都进行数据清理 // 清空测试数据库 tearDown: function() { clear(); }, // 测试 init 方法,略 testInit: function() { ... }, // 测试 dbo.users.list() 方法,逐一验证返回结果 testList: function() { var users = dbo.users.list(); Assert.assertEquals(2, users.length, 0); Assert.assertEquals("user1", users[0].name); Assert.assertEquals("desc1", users[0].desc); Assert.assertEquals("user2", users[1].name); Assert.assertEquals("desc2", users[1].desc); }, // 测试 dbo.users.save(...) 方法,验证 users 集合的变化 testSaveAsAdd: function() { dbo.users.save({ name: 'xxx', desc: 'yyy' }); var users = getUsers(); Assert.assertEquals(3, users.length, 0); Assert.assertEquals("xxx", users[2].name); Assert.assertEquals("yyy", users[2].desc); }, // 以下省略 };
dbo 对象的测试案例集如下(不过目前仅包含 dbo.users 的测试案例):
scripts/test/app/dbo.js
testDBO = { name: function() { return "DBO Test"; }, suite: function() { return [ testDBOUsers ]; } };
编写测试案例(PAGE)
接下来看看 page 对象的测试案例。
我们先执行 page.index,然后获取测试数据库中的 users 列表; users 列表的数据应该包含在返回结果中,因此可以逐一进行验证。
scripts/test/app/page.js
testPage = { name: function() { return "Page Test"; }, setUp: function() { clear(); init(); }, tearDown: function() { clear(); }, testIndex: function() { var ret = page.index(); var users = getUsers(); Assert.assertTrue(ret.indexOf(users[0].name) >= 0); Assert.assertTrue(ret.indexOf(users[0].desc) >= 0); Assert.assertTrue(ret.indexOf(users[1].name) >= 0); Assert.assertTrue(ret.indexOf(users[1].desc) >= 0); } };
编写测试案例(API)
api 对象的测试案例包括 testAPIHello 和 testAPIUsers,这里仅以 testAPIUsers 为例。
scripts/test/app/api/users.js
testAPIUsers = { name: function() { return "API Users Test"; }, setUp: function() { clear(); init(); }, tearDown: function() { clear(); }, testSave: function() { api.users.save({ name: 'xxx', desc: 'yyy' }); var users = getUsers(); Assert.assertEquals(3, users.length, 0); Assert.assertEquals("xxx", users[2].name); Assert.assertEquals("yyy", users[2].desc); }, testRemove: function() { api.users.remove("user1"); var users = getUsers(); Assert.assertEquals(1, users.length, 0); Assert.assertEquals("user2", users[0].name); Assert.assertEquals("desc2", users[0].desc); }, testExists: function() { Assert.assertTrue(dbo.users.exists("user1")); Assert.assertFalse(dbo.users.exists("xxx")); } };
api 对象的测试案例的主要代码如下:
scripts/test/app/api.js
testAPI = { name: function() { return "API Test"; }, suite: function() { return [ testAPIHello, testAPIUsers ]; } };
测试案例集汇总并执行
接下来讲以上测试案例集进行汇总。首先需要创建几个空的对象,然后通过 load(...) 方法加载必要的 js 文件;
接着将测试案例集组成数组,通过 test(...) 执行。主要代码如下:
dbo = {}; api = {}; page = {}; proxy = {}; load("scripts/test/test.js"); load("scripts/test/app/config.js"); // 加载其他 js 文件,略 test({ name: function() { return "APP Test Suite"; }, suite: function() { return [ testDBO, testAPI, testPage ]; } });
此外,还有 views 对象的测试案例,位于 scripts/test/both/views.js ,这里就先省略了。
运行测试案例集
首先通过命令行启动 mongod,然后在 Luncher.java 上点击鼠标右键 -> Run Configurations...,在 arguments 中填写 scripts/test/app/testAll.js:
点击 Run,可以看到 junit3 的 swing UI:
也可以选择特定测试案例并执行:
也可以在 Arguments中填写 scripts/test/both/views.js 并执行,以测试 views 对象。