struts2中的action单元测试

本文探讨了如何对Struts2框架中的Action进行单元测试,包括处理异常和认证的测试场景。通过使用JUnit,我们可以确保Action的正确行为,提高代码质量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

struts单元测试

java技术    2008-07-15 12:23   阅读273   评论0  
字号:    
struts单元测试
2007-12-03 18:23
package examples;
import servletunit.struts.MockStrutsTestCase;
import java.io.*;
public class TestLoginAction extends MockStrutsTestCase {
    public TestLoginAction(String testName) {
        super(testName);
     }
    public void setUp() throws Exception {
        super.setUp();
        File contextFile = new File("E://study//讲
//struts//strutstest213-1.2_2.4//strutstest//examples");
         setContextDirectory(contextFile);
         this.getSession().setAttribute("username", "deryl");
       }
    public void testSuccessfulLogin() {
        
        addRequestParameter("password","radar");
       
        setRequestPathInfo("/login");
       
        actionPerform();
       
        assertEquals("deryl",getSession().getAttribute("username"));
       
        verifyForward("success");
        verifyForwardPath("/main/success.jsp");
        assertEquals("deryl",getSession().getAttribute("authentication"));
        verifyNoActionErrors();
    }
    public void testFailedLogin() {
        addRequestParameter("password","express");
        setRequestPathInfo("/login");
        actionPerform();
        verifyForward("login");
        verifyForwardPath("/login/login.jsp");
        verifyInputForward();
        verifyActionErrors(new String[] {"error.password.mismatch"});
        assertNull(getSession().getAttribute("authentication"));
    }
    public static void main(String[] args) {
        junit.textui.TestRunner.run(TestLoginAction.class);
    }

}

    基本使用方法和Junit差不多,注意以下几点:

    1.设置好项目所在目录(一般应该是WEB-INF的上一级目标),让程序能够读到几个重要文件

        File contextFile = new File("E://study//讲file://struts//strutstest213-1.2_2.4//strutstest//examples");

      setContextDirectory(contextFile);
   

    2.如果Action要在session或request中取东西的话,要预先设置

     在public void setUp() throws Exception {}中调用

     this.getSession()或this.getRequest(),如上所示:

       this.getSession().setAttribute("username", "deryl");

    3.设置ActionForm变量的话,用addRequestParameter("password","express")设置

    4.设置Action的调用路径用setRequestPathInfo("/login");

    5.执行Action时调用actionPerform();这句话必不可少

    6.运行自带例子时,莫名其妙抛出异常,一会儿又好了,不知道什么问题不过自带的例子应该是没问题的

 

 

import java.io.File;

import org.laolian.computer.web.core.SessionContainer;

import servletunit.struts.MockStrutsTestCase;

public class LoginTest extends MockStrutsTestCase {

@Override
protected void setUp() throws Exception {
   // TODO Auto-generated method stub
   super.setUp();
   setContextDirectory(new File("WebRoot"));
}

@Override
protected void tearDown() throws Exception {
   // TODO Auto-generated method stub
   super.tearDown();
}
public void testVerify(){
   addRequestParameter("username", "laolian");
   addRequestParameter("password", "laolian");
   addRequestParameter("state", "verify");
   setRequestPathInfo("/login");
   actionPerform();
   verifyNoActionErrors();
  
   verifyForward("main");
   assertEquals("laolian", ((SessionContainer)request.getSession().getAttribute("SessionContainer")).getUser().getUsername());;
}

}

 

使用StrutsTestCase进行测试驱动开发

StrutsTestCase 是一种用于测试Struts Actions的强大而且易于使用的测试框架Struts和StrutsTestCase,结合传统的JUnit 测试,将会带来你高覆盖率的测试,从而提高产品的可靠性[@more@]StrutsTestCase 是一种基于JUnit, 用于测试 Struts ,用于测试应用程序的Struts action 类的一种简单高效的方式

典型的J2ee应用程序的层次结构如图1所示:
·         DAO层用于封装对数据库访问
·         在DAO层,你会发现Hibernate 映射类查询实体EJB或者其他的实体-关系持久技术
·         业务逻辑层包含更多的高级的业务服务在理想状态下,业务层独立于数据库实现事务EJB在这层经常被使用
·         表达层负责为用户显示应用程序数据和解释用户的请求在Struts应用程序中,表达层经常使用JSP/JSTL显示数据,用Struts action处理用户的请求
·         基本上,客户层是运行在客户机器上的web浏览器客户端逻辑(比如:JS)有时候被放到这一层,虽然它是难以有效被测试的

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值