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方法,暂时还没找到其他的处理方法。