PandaJS 使用说明(1.9):编写测试

[size=large][align=center][b]PandaJS 使用说明(1.9):编写测试[/b][/align][/size]
  PanadaJS 的测试库是在 junit 3 的基础上修改而成的,界面上使用的是 swing,我已经将修改后的 junit 工程放在 svn 上了:
  [url]https://pandajs.googlecode.com/svn/trunk/junit/[/url]
  接下来,就让我们为 scripts/app 目录下的文件编写测试吧。

[size=medium][align=center][b]编写测试案例(DBO)[/b][/align][/size]
  与用 java 编写的 junit3 测试案例相似,PandaJS 的一个测试案例包含 setup(),tearDown(),和若干个 textXXX() 测试方法。同时,还需要一个获取案例名称的 name() 方法。
  这些案例可以直接用 test(...) 执行,也可以将多个测试案例组成测试案例集后用 test(...) 执行。测试案例集是可以嵌套的。

  以 dbo.users 的测试案例为例,在 setUp() 方法中进行清理和初始化,在 tearDwon 中再次进行清理,在 testXXX(...) 方法中执行调用测试的方法并使用 Assert 进行验证。
  执行测试案例时,所有以 "test" 开头的方法都将被执行, setUp() 方法在每次执行 testXXX(...) 之前执行,tearDown(...) 方法在每次执行 testXXX(...) 之后执行。
  Assert 的用法与 junit3 中是一样的。
  主要代码如下:

[b]scripts/test/app/dbo/users.js[/b]

// 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 的测试案例):

[b]scripts/test/app/dbo.js[/b]

testDBO = {
name: function() {
return "DBO Test";
},
suite: function() {
return [ testDBOUsers ];
}
};


[size=medium][align=center][b]编写测试案例(PAGE)[/b][/align][/size]
  接下来看看 page 对象的测试案例。
  我们先执行 page.index,然后获取测试数据库中的 users 列表; users 列表的数据应该包含在返回结果中,因此可以逐一进行验证。

[b]scripts/test/app/page.js[/b]

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);
}
};


[size=medium][align=center][b]编写测试案例(API)[/b][/align][/size]
  api 对象的测试案例包括 testAPIHello 和 testAPIUsers,这里仅以 testAPIUsers 为例。  

[b]scripts/test/app/api/users.js[/b]

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 对象的测试案例的主要代码如下:

[b]scripts/test/app/api.js[/b]

testAPI = {
name: function() {
return "API Test";
},
suite: function() {
return [ testAPIHello, testAPIUsers ];
}
};


[size=medium][align=center][b]测试案例集汇总并执行[/b][/align][/size]
  接下来讲以上测试案例集进行汇总。首先需要创建几个空的对象,然后通过 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 ,这里就先省略了。


[size=medium][align=center][b]运行测试案例集[/b][/align][/size]
  首先通过命令行启动 mongod,然后在 Luncher.java 上点击鼠标右键 -> Run Configurations...,在 arguments 中填写 scripts/test/app/testAll.js:
[align=center][img]http://dl.iteye.com/upload/picture/pic/97851/7b330dbf-1848-306f-9133-9daaf90e8555.png[/img][/align]

  点击 Run,可以看到 junit3 的 swing UI:
[align=center][img]http://dl.iteye.com/upload/picture/pic/97853/614b7d82-e26c-38df-8363-b8b8f15df798.png[/img][/align]

  也可以选择特定测试案例并执行:
[align=center][img]http://dl.iteye.com/upload/picture/pic/97855/0c19832a-ce56-3543-94cf-4ea970e53e8d.png[/img][/align]

  也可以在 Arguments中填写 scripts/test/both/views.js 并执行,以测试 views 对象。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值