日期:2014-05-16  浏览次数:20387 次

PandaJS 使用说明(1.9):编写测试
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"))