`
裴小星
  • 浏览: 264956 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
8ccf5db2-0d60-335f-a337-3c30d2feabdb
Java NIO翻译
浏览量:27803
F3e939f0-dc16-3d6e-8c0b-3315c810fb91
PureJS开发过程详解
浏览量:73989
07a6d496-dc19-3c71-92cf-92edb5203cef
MongoDB Java ...
浏览量:62890
社区版块
存档分类
最新评论

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"));
		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 对象。
3
2
分享到:
评论

相关推荐

    darkfbv1.9:脚本黑客通过访问令牌登录Facebook

    "darkfbv1.9: 脚本黑客通过访问令牌登录Facebook"这个标题揭示了一个网络安全问题,涉及到黑客利用特定工具(darkfbv1.9)侵入Facebook账户。"脚本黑客"通常指的是使用自动化脚本进行攻击的恶意行为者,而“访问令牌...

    基于Python Django1.9 jquery编写的程序在线评测系统(OJ)Online Judge System

    【作品名称】:基于Python Django1.9 jquery编写的程序在线评测系统(OJ)Online Judge System 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目...

    Ping Monster v1.9:Ping monitor 监控工具 v1.9-开源

    Ping Monster 是一款免费软件 ping 监控工具,带有一些警报操作,包括电子邮件和声音警报以及 HTTP 发布。 版本 1.9

    commons-codec-1.9-API文档-中文版.zip

    赠送jar包:commons-codec-1.9.jar; 赠送原API文档:commons-codec-1.9-javadoc.jar; 赠送源代码:commons-codec-1.9-sources.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    jquery 1.6 - 1.9

    《jQuery 1.6至1.9:JavaScript的王者库》 jQuery,作为JavaScript库的翘楚,自2006年诞生以来,以其简洁易用的API和强大的功能深受开发者喜爱。本篇将深入探讨jQuery 1.6至1.9版本之间的变化与重要特性,帮助你更...

    barnyard2-1.9.tar.gz

    《深入解析barnyard2-1.9:构建强大的安全日志分析系统》 在网络安全领域,有效的日志管理和分析是至关重要的。barnyard2是一个功能强大的工具,用于将Snort IDS(入侵检测系统)生成的日志转换为可操作的数据,...

    cobertura 1.9.4.1

    **Cobertura 1.9.4.1:单元测试覆盖率工具详解** Cobertura 是一个开源的 Java 代码覆盖率工具,主要用于衡量软件项目中单元测试的覆盖程度。版本 1.9.4.1 是该工具的一个稳定版本,它为开发者提供了详细的信息,...

    zt-exec-1.9-API文档-中文版.zip

    赠送jar包:zt-exec-1.9.jar; 赠送原API文档:zt-exec-1.9-javadoc.jar; 赠送源代码:zt-exec-1.9-sources.jar; ...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    IntelBurnTest_v1.9

    《IntelBurnTest_v1.9:深度解析与应用》 IntelBurnTest_v1.9是一款由Intel官方推出的CPU测试工具,旨在对处理器进行高强度的压力测试,以检验其性能极限和稳定性。这款软件对于电脑硬件爱好者、系统优化人员以及...

    jersey-json-1.9-API文档-中英对照版.zip

    赠送jar包:jersey-json-1.9.jar; 赠送原API文档:jersey-json-1.9-javadoc.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。

    EasyWebSvr1.9.rar

    《EasyWebSvr1.9:Windows平台的轻量级Web服务器详解》 在数字化信息时代,Web服务器作为互联网服务的基础,扮演着至关重要的角色。本文将深入探讨一款名为EasyWebSvr1.9的轻量级Web服务器,旨在帮助用户理解其功能...

    jquery1.9 资源包

    《jQuery 1.9:深入理解与应用》 jQuery,作为JavaScript库的杰出代表,以其简洁易用的API和强大的功能赢得了全球开发者的喜爱。在本文中,我们将深入探讨jQuery 1.9这一版本,了解其核心特性、新变化以及在实际...

    hawtbuf-1.9-API文档-中英对照版.zip

    赠送jar包:hawtbuf-1.9.jar; 赠送原API文档:hawtbuf-1.9-javadoc.jar; 赠送源代码:hawtbuf-1.9-...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。

    jersey-core-1.9-API文档-中文版.zip

    赠送jar包:jersey-core-1.9.jar; 赠送原API文档:jersey-core-1.9-javadoc.jar; 赠送源代码:jersey-core-1.9-sources.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    魔方内存盘 1.9

    《魔方内存盘 1.9:提升系统性能的神器》 在现代计算机技术中,优化系统性能已经成为用户关注的焦点。魔方内存盘 1.9,这款由软媒公司精心研发的免费虚拟内存盘工具,正是为了满足这一需求而诞生的。它巧妙地将内存...

    final ik1.9下载

    更新 (1.9): 1.9 版本对最终逆向运动...- 已在新版 Oculus Quest 硬件上测试 VRIK。 - 更新的文档。 请参阅发行说明来了解全部更新细节。 Final IK 1.9 与 PuppetMaster 0.9 和 Unity 2017/2018/2019 版本完全兼容。

    Jfinal1.9最新

    《JFinal 1.9:轻量级Java Web开发框架深度解析》 JFinal是基于Java的MVC框架,以其轻量级、高效能、易用性而深受开发者喜爱。最新发布的1.9版本,是对前一版的优化与升级,旨在提供更好的开发体验和更高的性能。...

    MapleLeaf_v1.9.

    《MapleLeaf_v1.9:一款高效实用的留言板模板详解》 在信息化时代,网站互动功能变得至关重要,其中留言板是提升用户体验、收集用户反馈的重要工具。今天我们要介绍的是一款名为"MapleLeaf_v1.9"的留言板模板,这款...

Global site tag (gtag.js) - Google Analytics