posts - 165, comments - 198, trackbacks - 0, articles - 1
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

不使用容器 进行 测试 jsp

Posted on 2007-11-02 17:11 G_G 阅读(1207) 评论(0)  编辑  收藏 所属分类: JUnit
参照:容器外的JSP页面测试技术
由于上面给出例 复杂 。一般人很难理解。我也是 ^_^
但仔细看我还是自己写出一个比较简单的,望大家一起讨论。

被测试jsp
<%@ taglib prefix="html" uri="/WEB-INF/struts-html.tld" %>
<%@ taglib prefix="c" uri="/WEB-INF/c-1_0-rt.tld" %>
<html:html>
    
<c:if test="${name != pass}">
       ${name}  
<br>
       ${pass} 
<br>
       <!-- <html:text property="in" ></html:text> -->
    </c:if>
</html:html>





ant直接把他放在 eclipes 工程的根目录下 build.xml
   
但有有3个参数要设置 tomcat.home  Tomcat 的地址
                        webapp.path 工程中的根目录,下面有WEB-INF
                        src 原代码 (到时候jsp会翻译成.java
                                    到这个目录的 org.apache.jsp.jsp 下)
<project name="Webapp Precompilation" default="all" basedir="."> 

  
<!-- tomcat dir -->
  
<property name="tomcat.home" value="D:\Tomcat 5.0"/>
  
  
<!-- this=..//WEB-INF (in eclipes)  -->
  
<property name="webapp.path" value=".\WebRoot"/>
  
<!-- src (in eclipes) -->
  
<property name="src" value="./src"/>

  
<target name="jspc"> 
    
<taskdef classname="org.apache.jasper.JspC" name="jasper2" > 
      
<classpath id="jspc.classpath"> 
        
<pathelement location="${java.home}/../lib/tools.jar"/> 
        
<fileset dir="${tomcat.home}/bin"> 
          
<include name="*.jar"/> 
        
</fileset> 
        
<fileset dir="${tomcat.home}/server/lib"> 
          
<include name="*.jar"/> 
        
</fileset> 
        
<fileset dir="${tomcat.home}/common/lib"> 
          
<include name="*.jar"/> 
        
</fileset> 
      
</classpath> 
    
</taskdef> 

    
<jasper2 
             
validateXml="false" 
             uriroot
="${webapp.path}" 
             webXmlFragment
="${webapp.path}/WEB-INF/generated_web.xml" 
             outputDir
="${src}" /> 
  
</target>

  
<target name="compile">

    
<mkdir dir="${webapp.path}/WEB-INF/classes"/>
    
<mkdir dir="${webapp.path}/WEB-INF/lib"/>

    
<javac destdir="${webapp.path}/WEB-INF/classes"
           optimize
="off"
           debug
="on" failonerror="false"
           srcdir
="${src}" 
       excludes
="**/*.smap">
      
<classpath>
        
<pathelement location="${webapp.path}/WEB-INF/classes"/>
        
<fileset dir="${webapp.path}/WEB-INF/lib">
          
<include name="*.jar"/>
        
</fileset>
        
<pathelement location="${tomcat.home}/common/classes"/>
        
<fileset dir="${tomcat.home}/common/lib">
          
<include name="*.jar"/>
        
</fileset>
        
<pathelement location="${tomcat.home}/shared/classes"/>
        
<fileset dir="${tomcat.home}/shared/lib">
          
<include name="*.jar"/>
        
</fileset>
        
<fileset dir="${tomcat.home}/bin"> 
          
<include name="*.jar"/> 
        
</fileset> 
      
</classpath>
      
<include name="**" />
      
<exclude name="tags/**" />
    
</javac>

  
</target>

  
<target name="all" depends="jspc,compile">
  
</target>

  
<target name="cleanup">
      
<delete>
        
<fileset dir="${webapp.path}/WEB-INF/src"/>
        
<fileset dir="${webapp.path}/WEB-INF/classes/org/apache/jsp"/>
      
</delete>
  
</target>

</project>

TEST
package jetty.test.supper;


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.jsp.jsp.MyJsp_jsp;

import com.meterware.httpunit.GetMethodWebRequest;
import com.meterware.httpunit.WebRequest;
import com.meterware.httpunit.WebResponse;
import com.meterware.servletunit.InvocationContext;
import com.meterware.servletunit.ServletRunner;
import com.meterware.servletunit.ServletUnitClient;

import junit.framework.TestCase;

public class JSPCTest extends TestCase{
    
private InvocationContext ic = null ;

    
protected void setUp() throws Exception {
        ServletRunner sr 
= new ServletRunner();
           
// 向环境中注册 jsp
        sr.registerServlet("HelloWorld", MyJsp_jsp.class.getName());
        ServletUnitClient  sc 
= sr.newClient();
        WebRequest request 
= new GetMethodWebRequest("http://localhost/HelloWorld");
         ic 
= sc.newInvocation(request);

    }
    
    
public void testJspC() throws Exception{
        HttpServletRequest re 
=  ic .getRequest();
        HttpServletResponse rq 
=  ic.getResponse();
        re.setAttribute(
"name","liukaiyi");
        re.setAttribute(
"pass","123456");
        
        MyJsp_jsp is 
= (MyJsp_jsp) ic.getServlet();
        is._jspService(re,rq);
        
        WebResponse response 
= ic.getServletResponse();
// 输出
        System.out.println( response.getText() );
        
    }
}

结果是
<html>
    
       liukaiyi  
<br>
       123456 
<br>
    
    
</html>

后面用 HttpUnit 和 HtmlUnit 测试就不用我说了把 网上一大把。





只有注册用户登录后才能发表评论。


网站导航: