SSH2调整时,struts的action用junit测试

SSH2整合时,struts的action用junit测试

听说能用junit直接测试struts的action,感觉很有用,这样单元测试终于能直接测试web了,试着用一下。

工程首先导入StrutsSpringTestCase所在的包-struts2-junit-plugin-2.3.14.jar

然后编写测试类

public class UserActionTest extends StrutsSpringTestCase{
 
 @Override
 protected String[] getContextLocations() {
  return new String[]{"classpath:applicationContext.xml"};
 }
 @Test
 public void testLogin() throws Exception{
  request.setParameter("userName", "zhangsan");
  request.setParameter("userPwd", "123456");
  ActionProxy proxy=this.getActionProxy("/user!login");
  UserAction action=(UserAction)proxy.getAction();
  String result=action.login();
  Assert.assertEquals("success", result);
 }
 @Test
 public void testRegister() throws Exception{
  request.setParameter("userName", "zhangsan");
  request.setParameter("userPwd", "123456");
  ActionProxy proxy=this.getActionProxy("/user");
//  UserAction action=(UserAction)proxy.getAction();
  String result=proxy.execute();
  Assert.assertEquals("register", result);
 }
}

发现有两个问题,1个是重写getContextLocations方法,否则找到的spring配置文件仍然是WEB-INF下面的。

另一个就是对于proxy.execute();方法,能取到request提供的参数,但对于自定义的Action中的方法,例如

UserAction.login()方法,  

ActionProxy proxy=this.getActionProxy("/user!login");
  UserAction action=(UserAction)proxy.getAction();
  String result=action.login();

这样是取不到request中的参数的,所以可以在execute方法里直接执行login方法,暂时还没找到其他的处理方法。