当前位置:首页 » 多媒体相关

对于 jsp +servlet mvc框架的程序应该怎么测试 (2)


http://expert.csdn.net/expert/topic/1977/1977071.xml?temp=.7061884

推荐阅读

  • 东芝下注半导体显示器 预计07年利润将翻番 [详细内容]
  • 256MB超大空间 丽台GF6600LE到货售839 [详细内容]
  • 关于使用P2K的一点补充 [详细内容]
  • 飞利浦业界拼杀 推第1代电子纸媒体显示器 [详细内容]
  • 同学注意!英飞凌两条256MB内存售370 [详细内容]
  • 已经匹配的蓝牙耳机重新匹配 [详细内容]
  • Nvidia推新款高端图形芯片 将与ATI再度激战 [详细内容]
  • 网友回答:
    网友:swinging

    如果是单元测试,  
      我说说我以前的一种做法,  
      首先我们构建一个简单的框架:  
      jsp做显示,  
      一个servlet做事件派发器,  
      一个接口,暂时命名为handler,  
      对于客户的请求,根据请求名称我们获得当前请求的必要信息,  
      假如有这些:请求处理类名,请求的转向页面。  
      扩展handler接口的处理类执行具体的处理操作。  
      请求的处理类对请求进行处理,并把处理结果置入request,jsp页面获得处理结果  
      并展示它。  
       
      我使用的是httpunit,  
      首先是对servlet进行测试,这个很容易,  
      生成普通的测试类可以搞定,当然,这里可能还要添加一个handler的扩展用以测试,  
      对这个类,因为只有一个,而且功能确定,问题不大。  
       
      接着是对功能的添加,每当需要添加新的处理功能时,我们扩展handler来实现,  
      并且进行必要的配置,使我们的serlvet可以响应这个新功能的请求,  
       
      要对handler的扩展进行测试,我们还要做些准备,首先是将测试完成的servlet  
      拿出来,重新做一些必要的改动,如果有必要的话,比如,这个类将不再是httpservlet的  
      子类,这样做很有必要,然后我们可以重新构造一下其中的方法,比如将原来的一些抛出的异常改掉,还有,如果愿意的话可以改改方法的名字以适应它的新角色。  
       
       
      然后,我们包装一下我们的testcase,让所有要对handler扩展类进行的测试  
      都继承它,这么做的目的是简化具体类测试的过程,  
       
      因为测试过程中我们关注的是输入和输出,所以把配置输入和检验输出的部分抽象,  
      这里我们可以这么做,继承testcase,然后添加一个两个抽象方法,分别用于实现配置输入  
      和检验输出,由子类来完成,接着我们来重构一些testcase的方法,  
      这里我们只做一些简单的处理,  
      首先,由于我们对输入和检验输出都做了抽象,要求子类来实现,以对目标类的一次测试,  
      所以我们重栽runbare()方法,让它只调用我们的一个方法进行测试,  
      这个方法是我们要实现的,很简单,我们实例化一个已经准备好的用于测试的servlet,  
      把准备好的request和response以及servlet   config作为输入调用servelt的方法,  
      比方说,如果实际doget和dopost都调用的同一个方法doing,那么,我们就调用  
      doing()吧,执行完后,就要验证输出了。  
       
      在这里,简要说下环境配置,  
      我们可以实现一下setup()方法,先调用我们的配置参数方法获得一个map,它给定了  
      参数名以及参数值,这里的参数是模拟的页面传递给服务器的参数序列,  
      然后我们要获得一个servelt的环境,通过httpunit很容易做到:  
      sr   =   new   servletrunner("web.xml");  
      sc   =   sr.newclient();  
      request   =   new   postmethodwebrequest(   action   );  
      使用获得的参数map来配置request,  
      这样可以获得一个模拟的request,实际上基本和实际差不多了,  
      获得一个测试环境,  
      ic   =   sc.newinvocation(   request   );  
      通过它我们获得我们要真正用于测试的:  
      servlet   =   ic.getservlet();  
      realreq   =   ic.getrequest();  
      realres   =   ic.getresponse();  
      servlet.getservletconfig()获得我们的servletconfig,  
      三个参数具备了,  
      执行完成之后,我们对request进行验证,因为处理结果在request中,  
      这个由子类来完成。  
       
      好了,所有都准备好了之后,就可以对扩展handler的处理类进行测试了,  
      我们扩展一个准备好的testcase,实现参数配置,  
      在结果验证方法中我们验证request中的结果集是否正确。  
       
      httpunit的细节就不说了,  
      希望有更多人讨论。  
     

    网友:swinging

    因为好久没有做这种测试了,所以说起来不是很流畅,  
      见谅。给出的几句代码恐怕要了解下httpunit的。  
      最后还有一个就是页面的测试,  
      我很少做这方面工作,所以就不说了,  
      而在我们这个简单的框架中,如果控制的好的话,jsp承担的角色很简单,  
      如果要测试,那么仍然是使用httpunit可以完成,  
       
      另外有一个jwebunit,我以前简单得用过,  
      做页面得测试应该也是胜任得,而且有个朋友说过,他用它来测试,想来是不错得,  
      我之所以没有用它,是因为只知道可以进行web页面得测试,条件是要开服务得,  
      而我希望的是静态的直接对类进行测试,不开服务,这样才有效率嘛,^_^,  
      不过httpunit测试页面的过程中有很多麻烦,所以以前进行过一些实践,但都失败告终,  
      后来没有时间就算了,如果有人对这个有经验希望能共享下。  
     

    网友:tsingtsuan

    楼上的,你是做开发还是做测试的?

    网友:swinging

    为什么这么问?  
      这个有关系吗?  
      我以前学过一些测试,并对单元测试很感兴趣,  
      现在做开发,  
      楼上的问题回答了,  
      说下为什么这么问吧,  
      不然bs   y,  
      ^_^

    网友:fastpoint

    使用httpunit进行测试非常麻烦,因为httpunit使用了mozilia的js解释器,造成对现在的部分ie扩展脚本不支持,并且使用httpunit不是谁都可以用的。  
       
      jwebunit也只是在上层扩展的httpunit,原理一样,就是好用了一些。

    .

    讨论区

    Login