版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第第页可重复的系统测试可重复的系统测试
发表于:2023-04-03来源::点击数:标签:JWebUnit
在测试加入到servlet容器的Web应用程序时,编写符合逻辑的可重复的测试尤其需要技巧。在AndrewGlover的提高代码质量的这个续篇中,他介绍了Cargo,这是一个以通用方式自动化容器管理的开源框架,有了这个框架,您可以随时编写符合逻辑的可重复的
在测试加入到servlet容器的Web应用程序时,编写符合逻辑的可重复的测试尤其需要技巧。在AndrewGlover的提高代码质量的这个续篇中,他介绍了Cargo,这是一个以通用方式自动化容器管理的开源框架,有了这个框架,您可以随时编写符合逻辑的可重复的系统测试。在本质上,像JUnit和TestNG一样的测试框架方便了可重复性测试的创建。由于这些框架利用了简单Boolean逻辑(以assert方法的形式)的可靠性,这使得无人为干预而运行测试成为可能。事实上,自动化是测试框架的主要优点之一——我能够编写一个用于断言具体行为的相当复杂的测试,且一旦这些行为有所改变,框架就会报告一个人人都能明白的错误。
利用成熟的测试框架会带来框架可重复性的优点,这是显而易见的。但逻辑的可重复性却取决于您。例如,考虑创建用于验证Web应用程序的可重复测试的情况,一些JUnit扩展框架(如JWebUnit和HttpUnit)在协助自动化的Web测试方面非常好用。但是,使测试的plumbing可重复则是开发人员的任务,而这在部署Web应用程序资源时很难进行。
实际的JWebUnit测试的构造过程相当简单,如清单1所示:
清单1.一个简单的JWebUnit测试
packagee.acme.widget.Web;importnet.sourceforge.jwebunit.WebTester;importjunit.framework.TestCase;publicclassWidgetCreationTestextendsTestCase{privateWebTestertester;protectedvoidsetUp()throwsException{this.tester=newWebTester();this.tester.getTestContext().setBaseUrl("http://localhost:8080/widget/");}publicvoidtestWidgetCreation(){this.tester.beginAt("/CreateWidget.html");this.tester.setFormElement("widget-id","893-44");this.tester.setFormElement("part-num","rt45-3");this.tester.submit();this.tester.assertTextPresent("893-44");this.tester.assertTextPresent("suclearcase/"target="_blank">ccessfullycreated.");}}
这个测试与一个Web应用程序通信,并试图创建一个基于该交互的小部件。该测试随后校验此部件是否被成功创建。读过本系列之前部分的读者们也许会注意到该测试的一个微妙的可重复性问题。您注意到了吗?如果这个测试用例连续运行两次会怎样呢?
由这个小部件实例(即,widget-id)的验证方面可以判断出,可以安全地做出这样的假设,即此应用程序中的数据库约束很可能会阻止创建一个已经存在的额外的小部件。由于缺少了一个在运行另一个测试前删除此测试用例的目标小部件的过程,如果再连续运行两次,这个测试用例非常有可能会失败。
幸运的是,如前面文章中所探讨的那样,有一个有助于数据库-依赖性(database-dependent)测试用例可重复性的机制——即DbUnit。
使用DbUnit
改进清单1中的测试用例来使用DbUnit是非常简单的。DbUnit只需要一些插入数据库的数据和一个相应的数据库连接,如清单2所示:
清单2.用DbUnit进行的数据库-依赖性测试
packagee.acme.widget.Web;importjava.io.File;importjava.io.IOException;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.SQLException;importorg.dbunit.database.DatabaseConnection;importorg.dbunit.database.IDatabaseConnection;importorg.dbunit.dataset.DataSetException;importorg.dbunit.dataset.IDataSet;importorg.dbunit.dataset.xml.FlatXmlDataSet;importorg.dbunit.operation.DatabaseOperation;importnet.sourceforge.jwebunit.WebTester;importjunit.framework.TestCase;publicclassRepeatableWidgetCreationTestextendsTestCase{privateWebTestertester;protectedvoidsetUp()throwsException{this.handleSetUpOperation();this.tester=newWebTester();this.tester.getTestContext().setBaseUrl("http://localhost:8080/widget/");}publicvoidtestWidgetCreation(){this.tester.beginAt("/CreateWord.html");this.tester.setFormElement("widget-id","893-44");this.tester.setFormElement("part-num","rt45-3");this.tester.submit();this.tester.assertTextPresent("893-44");this.tester.assertTextPresent("successfullycreated.");}privatevoidhandleSetUpOperation()throwsException{finalIDatabaseConnectionconn=this.getConnection();finalIDataSetdata=this.getDataSet();try{DatabaseOperation.CLEAN_INSERT.execute(conn,data);}finally{conn.close();}}privateIDataSetgetDataSet()throwsIOException,DataSetException{returnnewFlatXmlDataSet(newFile("test/conf/seed.xml"));}privateIDatabaseConnectiongetConnection()throwsClassNotFoundException,SQLException{Class.forName("org.hsqldb.jdbcDriver");finalConnectionjdbcConnection=DriverManager.getConnection("jdbc:hsqldb:hsql://","sa","");returnnewDatabaseConnection(jdbcConnection);}}
加入了DbUnit,测试用例真的是可重复的了。在handleSetUpOperation()方法中,每当运行一个测试用例时,DbUnit对数据执行一个CLEAN_INSERT。此操作本质上将一个数据库的数据清空并插入一个新的数据集,从而删除任何之前创建的小部件。
再一次探讨什么是DbUnit?
DbUnit是一个JUnit扩展,用于在运行测试时将数据库放入一个已知状态中。开发人员使用XML种子文件将特定数据插入到测试用例所依赖的数据库中。因而,DbUnit便利了依赖于一个或多个数据库的测试用例的可重复性。
但那并不意味着已经结束了对测试用例可重复性这一话题的探讨。事实上,一切才刚刚开始。
重复系统测试
我喜欢将清单1和清单2中定义的测试用例称为系统测试。因为系统测试运行安装完整的应用程序,如Web应用程序,它们通常包含一个servlet容器和一个相关联的数据库。这些测试的目的在于校验那些设计为端对端操作的外部接口(如Web应用程序中的Web页面)。
弹性优先级
作为总体规则,应在任何可能的时候避免测试用例继承。许多JUnit扩展框架都提供特定的可继承测试用例,以便利于测试一个特定的架构。然而由于Java平台的单一继承范例,使得从框架中继承类的测试用例饱受缺乏弹性之苦。通常,这些相同的JUnit扩展框架提供了代理API,这使得联合各种不具有严格继承结构的框架变得十分简单。由于设计它们的目的是为了测试功能完整的应用程序,因而系统测试趋向于增加运行次数而不是减少设置测试的总时间。例如,清单1和清单2中展示的逻辑测试在运行前需要下列步骤:
创建一个war文件,该文件包含所有相关Web内容,如JSP文件、
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年矿山装载机安全培训内容重点
- 2026年强化调度安全培训内容核心要点
- 女工安全技能培训内容2026年一次通关
- 2026年工程安全作业培训内容实战手册
- 安康地区岚皋县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 宿州市墉桥区2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 安庆市望江县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 2026年教育行业数据应用合同协议
- 2026年租房合同协议书网站核心要点
- 荆门市钟祥市2025-2026学年第二学期四年级语文期中考试卷(部编版含答案)
- 山西省吕梁市2025-2026学年高三第二次模拟调研测试生物+答案
- 2026山东青岛海上综合试验场有限公司招聘38人备考题库含完整答案详解(全优)
- 大型赛事活动安保服务方案投标文件(技术标)
- 2026年上半年中小学教师资格考试教育知识与能力(中学)真题附答案解析
- 施工工地员工考核管理制度(3篇)
- 医院耗材监督考核制度
- 2025特变电工校园招聘200人笔试历年常考点试题专练附带答案详解2套试卷
- 2026年山东潍坊市高三一模高考生物模拟试卷(含答案详解)
- 玉林介绍教学课件
- 中建塔式起重机拆卸专项施工方案
- 2026年东莞市厚街控股集团有限公司招聘14名工作人员备考题库含答案详解
评论
0/150
提交评论