J2EE项目实训Hibernate框架技术——第4章 网上商城项目持久层设计和实现(第3部分)_第1页
J2EE项目实训Hibernate框架技术——第4章 网上商城项目持久层设计和实现(第3部分)_第2页
J2EE项目实训Hibernate框架技术——第4章 网上商城项目持久层设计和实现(第3部分)_第3页
J2EE项目实训Hibernate框架技术——第4章 网上商城项目持久层设计和实现(第3部分)_第4页
J2EE项目实训Hibernate框架技术——第4章 网上商城项目持久层设计和实现(第3部分)_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料第四章 网上商城项目持久层设计和实现(第3/3部分)1.1.1 构建对dao组件进行单元测试的环境1、对基于hibernate框架技术开发的组件的单元测试要点(1)测试主要涉及如下两个方面的测试1) 对其hibernate.cfg.xml文件以及各个 o/r mapping 的*.xml文件2) 基于hibernate的dao组件中的各个数据访问功能的方法进行测试。(2)在测试用例类中利用configuration类中的configure()方法来定位被测试系统的hibernate.cfg.xml文件,从而获得sessionfactory

2、,最后获得session。注意:有关对基于hibernate框架技术开发的组件的单元测试具体详细的内容,请读者阅读本书的第九章“对基于hibernate的dao单元测试”的内容。2、在当前项目所在的工作空间中添加一个测试项目(1)名称为testwebshopproject选择【文件】菜单中的【新建】菜单,再选择【项目】菜单项,并选择【新建java项目】菜单项后,将出现下面的图4.32所示的对话框。在项目的名称输入框中输入项目名称为testwebshopproject,请见下面的图4.32所示。图4.32 添加测试项目testwebshopproject的对话框(2)将前面的被测试项目引入到本测

3、试项目中右击本测试项目名称,选择【属性】菜单,将出现下面的图4.33的项目属性对话框。在“项目”标签页中点击【添加】按钮,最后在弹出的项目选择的对话框中选择前面的被测试项目的名称webshopproject。请参考下面的图4.33所示。图4.33 将被测试项目引入到本测试项目中的对话框3、在本测试项目中添加junit的*.jar包文件右击本测试项目名称,选择【属性】菜单,将出现下面的图4.34的项目属性对话框。在“库”标签页中点击【添加外部jar(x)】按钮。在本机器的磁盘中选择junit的系统包文件junit.jar(本项目采用junit 3.8版,当然本书假定读者熟悉单元测试以及junit

4、单元测试的应用)。请参考图4.34所示。图4.34 在本测试项目中添加junit的*.jar包文件的对话框4、在本测试项目中添加hibernate框架的各个系统包文件右击本测试项目名称,选择【属性】菜单,将出现下面的图4.34的项目属性对话框。在“库”标签页中点击【添加外部jar(x)】按钮。在本机器的磁盘中选择hibernate框架的系统包文件所在目录,并分别添加10个必须的hibernate框架的系统包*.jar文件。请参考图4.35所示。图4.35 在本测试项目中添加hibernate系统中必须的10个*.jar包文件的对话框1.1.2 构建对dao组件的测试用例类1、添加对各个*.xm

5、l文件进行测试的testcase类(1)新增一个测试用例testhibernatexml类右击本测试项目名称,选择【新建】菜单,再选择【junit测试用例】菜单项,请见下面的图4.36所示。图4.36 新增junit的测试用例的菜单项目(2)在下面的测试用例对话框中进行设置类名称的输入框中输入类名称为testhibernatexml,包名称为com.px1987.webshop.testdao,并选择基类为junit.framework.testcase。请见下面的图4.37所示的对话框。由于本测试用例是对项目中的各个hibernate的系统配置的*.xml文件进行测试,因此不需要选择被测试的

6、类名称。图4.37 添加testhibernatexml的测试用例的对话框(3)编程该测试用例,请参考【例4-7】所示。【例4-7】 测试用例testhibernatexml类的代码示例package com.px1987.webshop.testdao;import junit.framework.*;import org.hibernate.cfg.*;import org.hibernate.*;import java.io.file;public class testhibernatexml extends testcase private sessionfactory session

7、factory=null; protected void setup() throws exception super.setup(); /下面的*.xml文件的实际目录读者根据实际改变string targetfile=d:/allinonewebshop/webshopproject/webroot/web-inf/classes/hibernate.cfg.xml; file file = new file(targetfile); configuration config = new configuration().configure(file); sessionfactory = c

8、onfig.buildsessionfactory(); public void testhibernatexml() /对hibernate.cfg.xml中各个配置项目进行测试 this.assertnotnull(sessionfactory); protected void teardown() throws exception sessionfactory=null; super.teardown(); 本测试用例的测试目标是hibernate框架的hibernate.cfg.xml文件以及各个o/r mapping映射的*.xml文件中的各个配置标签项目是否正确。但由于无法直接测试

9、各个*.xml文件中的各个标签的正确性,因此,在测试的用例的设计上,主要是测试依据hibernate.cfg.xml文件能否正确地创建出sessionfactory类的对象。读者应该知道,如果各个*.xml文件中的某个标签有错误,hibernate框架在启动时将会产生异常抛出,最后也不可能会创建出sessionfactory类的对象;如果sessionfactory类的对象能够正确地被创建出,反推理而能够知道各个*.xml应该是正确的。2、执行该testcase类testhibernatexml(1)右击该测试用例类,并选择执行的方式为junit测试,请见下面的图4.38所示。图4.38 执行

10、testhibernatexml测试用例类(2)将出现下面的测试结果,请见图4.39所示。图4.39 testhibernatexml测试用例类的执行结果(3)同时在控制台中出现下面的hibernate启动的状态提示信息,请见图4.40所示。图4.40 hibernate启动的状态提示信息(4)如果测试过程中出现错误,将出现下面的提示,请见图4.41所示。图4.41 测试过程中如果出现错误时的提示信息3、添加对dao组件userinfocrudimple类进行测试的testcase类(1)新增一个测试用例testuserinfocrudimple类名称为testuserinfocrudimpl

11、e,包名称为com.px1987.webshop.testdao,基类为junit.framework.testcase。被测试的类选择为com.px1987.webshop.dao.crud.userinfocrudimple。请见下面的图4.42所示。图4.42 新建测试用例testuserinfocrudimple的对话框(2)点击【下一步】按钮将进入到下一步的对话框请见图4.43所示,在该对话框中选择我们需要进行测试的方法。图4.43 选择被测试类中的需要进行测试的各个被测试方法(3)最后点击【确定】按钮后,eclipse将自动地创建出一个空的测试用例模板程序类,请见下面的图4.44所

12、示。图4.44 eclipse自动创建出的测试用例模板程序类(4)编程该测试用例类中的各个测试方法,请参考【例4-8】所示。【例4-8】 testuserinfocrudimple测试用例类中的部分代码示例package com.px1987.webshop.testdao;import junit.framework.*;import org.hibernate.*;import com.px1987.webshop.dao.crud.*;import com.px1987.webshop.dao.exception.daoexception;import java.io.*;import

13、java.util.*;import com.px1987.webshop.dao.pobject.*;public class testuserinfocrudimple extends testcaseprivate userinfocrudinterface userinfocrudimple = null;public testuserinfocrudimple(string arg0) super(arg0);protected void setup() throws exception super.setup();userinfocrudimple=new userinfocrud

14、imple();protected void teardown() throws exception userinfocrudimple=null;super.teardown();public void testinsertoneuserinfo() throws daoexception userinfopo oneuserinfopo=new userinfopo();oneuserinfopo.setusername(张三);oneuserinfopo.setuserpassword(1234);oneuserinfopo.setusertype(1);oneuserinfopo.se

15、taliaoname(网上张飞);oneuserinfopo.setpasswordask(who are you?);oneuserinfopo.setuserimage(./webresource/personimage/chang.gif);oneuserinfopo.setregistertime(new date().tolocalestring();oneuserinfopo.setpasswordanswer(zhang);oneuserinfopo.setusermail();oneuserinfopo.setusersex(1);oneuser

16、infopo.setuserbirthday(2007-01-25);oneuserinfopo.setusercomefrom(北京);oneuserinfopo.setuserresume(我是网络飞人);oneuserinfopo.setusersign(12345678900);oneuserinfopo.setemailvisible(1);oneuserinfopo.setacceptadvise(1);boolean actualreturn=userinfocrudimple.insertoneuserinfo(oneuserinfopo);this.asserttrue(ac

17、tualreturn);public void testselectalluserinfo() throws daoexception arraylist allregisteruserinfos=userinfocrudimple.selectalluserinfo();this.assertnotnull(allregisteruserinfos);iterator allitem=allregisteruserinfos.iterator();while(allitem.hasnext()userinfopo oneregisteruserinfopo=(userinfopo)allit

18、em.next();this.assertnotnull(oneregisteruserinfopo);string registerusername=oneregisteruserinfopo.getusername();this.assertnotnull(registerusername);public void testselectsomeuserinfo() throws daoexception string testedregisterusername=张三;string hqlselect=from com.px1987.webshop.dao.pobject.userinfo

19、po asoneregisteruserinfopo+ where oneregisteruserinfopo.username=+testedregisterusername+;arraylist allsomeregisteruserinfos=userinfocrudimple.selectsomeuserinfo(hqlselect);this.assertnotnull(allsomeregisteruserinfos);iterator allitem=allsomeregisteruserinfos.iterator();while(allitem.hasnext()userin

20、fopo oneregisteruserinfopo=(userinfopo)allitem.next();this.assertnotnull(oneregisteruserinfopo);string registerusername=oneregisteruserinfopo.getusername();this.assertnotnull(registerusername);public void testselectoneuserinfo() throws daoexception / 下面的id应该根据数据库表中的实际的数据值来决定string registeruserid=402

21、880681071d7ed011071d7f24b0002; userinfopo someoneregisteruserinfopo=userinfocrudimple.selectoneuserinfo(registeruserid);this.assertnotnull(someoneregisteruserinfopo);string registerusername=someoneregisteruserinfopo.getusername();this.assertnotnull(registerusername);this.assertnotnull(someoneregiste

22、ruserinfopo.getcontactmethod();this.assertnotnull(someoneregisteruserinfopo.getcontactmethod().get(userqqcode);public void testupdateoneuserinfo() throws daoexception / 下面的id应该根据数据库表中的实际的数据值来决定string registeruserid=402880681071d7ed011071d7f24b0002; userinfopo newoneregisteruserinfopo=new userinfopo(

23、);newoneregisteruserinfopo.setid(registeruserid);newoneregisteruserinfopo.setusername(张三);/本测试方法只是对原来的数据改变为此值newoneregisteruserinfopo.setuserpassword(12345678); newoneregisteruserinfopo.setusertype(1);newoneregisteruserinfopo.setaliaoname(网上张飞);newoneregisteruserinfopo.setpasswordask(who are you?);n

24、ewoneregisteruserinfopo.setuserimage(./webresource/personimage/chang.gif);newoneregisteruserinfopo.setregistertime(new date().tolocalestring();newoneregisteruserinfopo.setpasswordanswer(zhang);newoneregisteruserinfopo.setusermail();newoneregisteruserinfopo.setusersex(1);newoneregiste

25、ruserinfopo.setuserbirthday(2007-01-25);newoneregisteruserinfopo.setusercomefrom(北京);newoneregisteruserinfopo.setuserresume(我是网络飞人);newoneregisteruserinfopo.setusersign(12345678900);newoneregisteruserinfopo.setemailvisible(1);newoneregisteruserinfopo.setacceptadvise(1);newoneregisteruserinfopo.setco

26、ntactmethod(newcontactmethod);boolean actualreturn=userinfocrudimple.updateoneuserinfo(newoneregisteruserinfopo);this.asserttrue(actualreturn);public void testupdateoneuserpassword() throws daoexception /下面的id应该根据数据库表中的实际的数据值来决定string registeruserid=402880681071d7ed011071d7f24b0002; string newpasswo

27、rd=1234;boolean actualreturn=userinfocrudimple.updateoneuserpassword(newpassword, registeruserid);this.asserttrue(actualreturn);public void testdeleteoneuserinfo() throws daoexception /*注意:该测试方法只能执行一次,下次执行时,必须改变userid的值。因为数据库表中的某条数据已经被删除了,否则将会产生测试错误!同时下面的id应该根据数据库表中的实际的数据值来决定*/string registeruserid=

28、402880681071d7ed011071d7f24b0002; boolean actualreturn=userinfocrudimple.deleteoneuserinfo(registeruserid);this.asserttrue(actualreturn);(5)执行本测试用例testuserinfocrudimple类右击测试用例testuserinfocrudimple类,并选择执行的方式为junit测试,请见下面的图4.45所示。图4.45 执行测试用例testuserinfocrudimple类(6)将出现下面的测试结果,请见图4.46所示。图4.46 测试用例testuserinfocrudimple类的执行结果(7)同时,在控制台中将能够看到hibernate框架所产生的各种sql语句。表明测试类中的各种测试方法是真正地进行了数据访问操作,请见图4.47所示。图4.47 在控制台中能够看到hibernate所产生的各种sql语句1.2 本章小结1、本章的学习重点本章通过一个网上商城项目,对其持久层设计和实现过程中所涉及的各个方面知识进行系统性讲解。同时将与hibernate框架相关的内容融化到项目中,这样能够让读者真正地体验企业级应用开发中的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论