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