struts2.0 + Sping2.5 进行单元测试

来源:互联网 发布:mac地址手机怎么进入 编辑:程序博客网 时间:2024/06/01 10:25

struts2.1版本以上 使用  getActionProxy() 来获取到 ActionPoxry对象,在测试Action层比较容易。

那么使用struts2.0 ,怎么来获取  ActionPoxry对象呢?我暂时没有什么比较好的办法。

测试Action层主要问题是怎么获取到请求中request,session中值。Struts2中提供ServiceActionContent可以获取到当前Request中的值。

那么就需要模拟给ServiceActionContent赋值。例如:

MockHttpServletRequest request = new MockHttpServletRequest();

ServletActionContext.setResponse(response);

这样就可以模拟把需要的值赋值进去。

下面是我写的示例:只把Action层,测试方法展现出来,其他配置就不在这里说明了。

Action层:

public String checkLogin() {
  String P3PString = "CP=CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR";//通过设置P3P头来实现跨域访问COOKIE
  getResponse().setHeader("P3P",P3PString);
  String rtn = "failure";
  if(userName==null)
   return rtn;
  if(passwd==null)
   return rtn;
  
  String md5Passwd = MD5Util.MD5(passwd);

  try {
   userName = userName.trim().replace(" ", "");
   boolean result = loginService.login(userName, md5Passwd);
   if (result) {
    getSession().setAttribute(SessionConstants.CUR_USERINFO, loginService.getSysUser());
    Constants.sessionMap.put(userName, getSession().getId());
    
    //cookie
    if (rememberMe != null && rememberMe.trim().equals("1")) {
     maxAge = 365 * 24 * 60 * 60;// 保留Cookie一年
    } else {
     maxAge = 0;// 清除cookie
    }
    cookieValue = "name:"+userName+",pwd:"+passwd;
    CookiesLogin.setCookiesValue(this.getRequest(), this.getResponse(), cookieName, cookieValue, maxAge);
    
    
    //写登录日志
    loginService.insertLog(loginService.getSysUser().getUserName(), loginService.getSysUser().getFullName());
    
    //获取模块
    List<Module> moduleList=null;
    moduleList=moduleService.getModule(loginService.getSysUser().getUserId());
    getSession().setAttribute(SessionConstants.CUR_MODULEINFO, this.getMenuList(moduleList));
    
    rtn = "success";
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
  return rtn;
 }

测试代码:

/** 使用哪个运行器* */
@RunWith(SpringJUnit4ClassRunner.class)
/** 设置要加载的配置文件 */
@ContextConfiguration(locations = {
  "classpath:config/applicationContext*.xml" })
  // /** 设置是否回滚数据 */
  
@TransactionConfiguration(transactionManager = "myTransactionManager", defaultRollback = false)
@Transactional
public class BaseCaseTestAction extends StrutsTestCase{
 
 @Autowired
 public LoginAction loginAction;
 
 @Test
 public void tesLogin(){
   MockHttpServletResponse response = new MockHttpServletResponse();
   MockHttpServletRequest request = new MockHttpServletRequest();
   MockHttpSession session = new MockHttpSession();
   request.setSession(session);
   ServletActionContext.setResponse(response);
   ServletActionContext.setRequest(request);
   loginAction.setUserName("liq");
   loginAction.setPasswd("123456");
  String result =  loginAction.checkLogin();
  assertEquals("success", result);
 }
}

 

这样的测试不太完善,本人暂时没有想到别的方法。

有什么好的方法希望大侠们多多指点

原创粉丝点击