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)有时候被放到这一层,虽然它是难以有效被测试的
|