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";
			}
			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开发了。期待呀。。。。。

猜你喜欢

转载自techno-it.iteye.com/blog/1148766
ssi
TDD