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"; } else return "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 { @Override protected void setUp() throws Exception { super.setUp(); } @Test public 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开发了。期待呀。。。。。