最近做个项目,由于没有美工,所以页面的工作进展迟缓,所以想脱离页面的束缚来开发Action级别的应用。于是在网上苦苦寻找解决方案,终于找到了JUnit做单元测试的方法,具体搭建方法参见[url]http://wenku.baidu.com/view/d5cb52c30c22590102029dc9.html[/url]用这种方法搭建有一个问题,就是它不会返给你,Action所要返回的具体值,而是Response出来的东西。所以,感觉有点不合我的要求,于是继续寻找,功夫不负有心人,我找到了下一种方法[url]http://kang36897.blog.163.com/blog/static/170473732010710101238126/[/url]。只是这种方法还是有个问题。就是我的Acion是这样写的。
在执行
方法时会发现,session是空的,null所以测试一直报失败。之后的时间里,经过不停的调试和修改,终于找到解决办法了。很简单就是在test方法上把session加上去。代码如下:
这样问题就会解决了!哈哈可以开开心心的TDD开发了。期待呀。。。。。
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开发了。期待呀。。。。。