techno_it 发表于 2013-2-3 11:53:16

SSH/SSI的TDD开发之实践

最近做个项目,由于没有美工,所以页面的工作进展迟缓,所以想脱离页面的束缚来开发Action级别的应用。于是在网上苦苦寻找解决方案,终于找到了JUnit做单元测试的方法,具体搭建方法参见http://wenku.baidu.com/view/d5cb52c30c22590102029dc9.html用这种方法搭建有一个问题,就是它不会返给你,Action所要返回的具体值,而是Response出来的东西。所以,感觉有点不合我的要求,于是继续寻找,功夫不负有心人,我找到了下一种方法http://kang36897.blog.163.com/blog/static/170473732010710101238126/。只是这种方法还是有个问题。就是我的Acion是这样写的。
import java.util.Map;import javax.servlet.http.HttpServletRequest;import org.apache.struts2.ServletActionContext;import org.apache.struts2.interceptor.SessionAware;import cn.com.pzhsteel.pojo.JUser;import cn.com.pzhsteel.service.UserService;import com.opensymphony.xwork2.ActionSupport;public class UserAction extends ActionSupport implements SessionAware{/** **/private static final long serialVersionUID = 1L;private JUser user;private UserService myService;private Map<String, Object> session;public String checkUser() throws Exception{HttpServletRequest request = ServletActionContext.getRequest();String flag=request.getParameter("user.name");if(myService == null)return "error";else{if(user == null){user = new JUser();user.setName("test");user.setPassword("12345");}if(myService.isUser(user)){session.put(user.getName(), user);return "success";}elsereturn "unsuccess";}}public JUser getUser(){return user;}public void setUser(JUser user){this.user = user;}public void setMyService(UserService myService){this.myService = myService;}public void setSession(Map<String, Object> session){this.session = session;}}
在执行
public void setSession(Map<String, Object> session){this.session = session;}
方法时会发现,session是空的,null所以测试一直报失败。之后的时间里,经过不停的调试和修改,终于找到解决办法了。很简单就是在test方法上把session加上去。代码如下:
package test.com.pzhsteel.action;import java.util.HashMap;import java.util.UUID;import javax.servlet.http.HttpSession;import org.apache.struts2.StrutsSpringTestCase;import org.junit.Assert;import org.junit.Test;import org.springframework.mock.web.MockHttpSession;import cn.com.pzhsteel.pojo.JUser;import com.opensymphony.xwork2.Action;import com.opensymphony.xwork2.ActionProxy;public class UserTest extends StrutsSpringTestCase{@Overrideprotected void setUp() throws Exception{super.setUp();}@Testpublic void testLogin() throws Exception{HashMap<String, Object> session = new HashMap<String, Object>();request.setParameter("user.name", "test");request.setParameter("user.password", "12345");request.setSession(getNewSession());ActionProxy proxy = getActionProxy("/userAction.action");Assert.assertNotNull(proxy);proxy.getInvocation().getInvocationContext().setSession(session);String result = proxy.execute();Assert.assertNotNull(result);Assert.assertEquals(Action.SUCCESS, result);}private HttpSession getNewSession(){HttpSession session = new MockHttpSession();String sessionId = UUID.randomUUID().toString();session.setAttribute("USER_SESSION",sessionId);return session;}private JUser getUser(String userName,String userPassWord,String userSysId){JUser user = new JUser();user.setName(userName);user.setPassword(userPassWord);user.setSysId(userSysId);return user;}@Override    protected String[] getContextLocations()    {      return (new String[] {            "classpath*:WEB-INF/applicationContext.xml"      });    }}
这样问题就会解决了!哈哈可以开开心心的TDD开发了。期待呀。。。。。
页: [1]
查看完整版本: SSH/SSI的TDD开发之实践