Struts2 Action的单元测试
作者:网络转载 发布时间:[ 2013/9/18 13:34:31 ] 推荐标签:
测试类:
TestAccountAction.java
package ut;
import action.AccountAction;
import com.opensymphony.xwork2.ActionProxy;
import com.opensymphony.xwork2.config.ConfigurationProvider;
import org.apache.struts2.StrutsTestCase;
import static org.testng.AssertJUnit.*;
public class TestAccountAction extends StrutsTestCase {
private AccountAction action;
private ActionProxy proxy;
private void init() {
proxy = getActionProxy("/createaccount"); //action url,可以写扩展名".action"也可以干脆不写
action = (AccountAction) proxy.getAction();
}
public void testUserNameErrorMessage() throws Exception {
request.setParameter("accountBean.userName", "Bruc");
request.setParameter("accountBean.password", "test");
init();
proxy.execute();
assertTrue("Problem There were no errors present in fieldErrors but there should have been one error present",
action.getFieldErrors().size() == 1);
assertTrue("Problem field account.userName not present in fieldErrors but it should have been",
action.getFieldErrors().containsKey("accountBean.userName"));
}
public void testUserNameCorrect() throws Exception{
request.setParameter("accountBean.userName", "Bruce");
request.setParameter("accountBean.password", "test");
init();
String result=proxy.execute();
assertTrue("Problem There were errors present in fieldErrors but there should not have been any errors present",
action.getFieldErrors().size()==0);
assertEquals("Result returned form executing the action was not success but it should have been.",
"success", result);
}
}
测试逻辑比较简单,action中的validate方法会保证用户名长度在5--9之间。
定义struts.xml,放在类路径的根目录下,而非web-inf/classes下,否则会找不到,不会加载你定义的内容。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
http://struts.apache.org/dtds/struts-2.0.dtd>
<struts>
<package name="testit" namespace="/" extends="struts-default">
<action name="createaccount" class="action.AccountAction">
<result name="success">/index.jsp</result>
<result name="input">/createaccount.jsp</result>
</action>
</package>
</struts>
至于action/result的定义中用到的jsp页面,不必真实存在,保持不为空行,否则,action测试的时候,会说result未定义之类的错误,因为此测试会模拟action真实状态下的运行。运行,一切OK。
正因为会模拟真实状态下的运行,所以拦截器也会正常被触发,下面再定义一个拦截器测试一下:
MyInterceptor.java
package interceptor;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class MyInterceptor extends AbstractInterceptor{
public String intercept(ActionInvocation actionInvocation) throws Exception {
System.out.println("before processing");
String rst= actionInvocation.invoke();
System.out.println("bye bye "+actionInvocation.getProxy().getMethod());
return rst;
}
}
相关推荐
更新发布
常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11系统性能测试及调优前期准备
2021/4/15 14:41:29国内比较好用的5款测试管理工具
2021/3/25 17:23:31