• JUNIT -- springMVC的action进行单元测试


    原文:http://blog.csdn.net/gaopeng0071/article/details/49946575

    我开发环境springMVC版本3.0.4

    样例代码:

    package com.redhorse.agent.action.junit;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.junit.Assert;
    import org.junit.BeforeClass;
    import org.junit.Test;
    import org.springframework.mock.web.MockHttpServletRequest;
    import org.springframework.mock.web.MockHttpServletResponse;
    import org.springframework.mock.web.MockServletContext;
    import org.springframework.web.context.WebApplicationContext;
    import org.springframework.web.context.support.XmlWebApplicationContext;
    import org.springframework.web.servlet.HandlerAdapter;
    import org.springframework.web.servlet.HandlerExecutionChain;
    import org.springframework.web.servlet.HandlerMapping;
    import org.springframework.web.servlet.ModelAndView;
    import org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter;
    import org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping;
    
    import com.redhorse.bean.AgentEmployeeBean;
    
    public class EmployeeManagerActionTest {
        private static HandlerMapping handlerMapping;
        private static HandlerAdapter handlerAdapter;
    
        /**
         * 读取spring3 MVC配置文件
         */
        @BeforeClass
        public static void setUp() {
            if (handlerMapping == null) {
                String[] configs = { "file:src/spring/*.xml","file:src/spring/servlet/*.xml" };
                XmlWebApplicationContext context = new XmlWebApplicationContext();
                context.setConfigLocations(configs);
                MockServletContext msc = new MockServletContext();
                context.setServletContext(msc);
                context.refresh();
                msc.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, context);
                handlerMapping = (HandlerMapping) context.getBean(DefaultAnnotationHandlerMapping.class);
                handlerAdapter = (HandlerAdapter) context
                        .getBean(context.getBeanNamesForType(AnnotationMethodHandlerAdapter.class)[0]);
            }
        }
    
        /**
         * 执行request对象请求的action
         * 
         * @param request
         * @param response
         * @return
         * @throws Exception
         */
        public ModelAndView excuteAction(HttpServletRequest request, HttpServletResponse response) throws Exception {
            HandlerExecutionChain chain = handlerMapping.getHandler(request);
            final ModelAndView model = handlerAdapter.handle(request, response, chain.getHandler());
            return model;
        }
    
        @Test
        public void save() throws Exception {
            MockHttpServletRequest request = new MockHttpServletRequest();
            MockHttpServletResponse response = new MockHttpServletResponse();
            AgentEmployeeBean ae = new AgentEmployeeBean();
            ae.setId(12);
            request.getSession().setAttribute("curUser", ae);
            request.setRequestURI("/employee/addEmployee");
            request.addParameter("email", "gpqhl0071@126.com");
            request.addParameter("mobile", "15652377458");
            request.addParameter("realName", "gao");
            request.addParameter("subRegionIds", "1");
            request.addParameter("end", "1000");
            request.addParameter("point", "10");
            request.setMethod("POST");
            // 执行URI对应的action
            final ModelAndView mav = this.excuteAction(request, response);
            // Assert logic
            Assert.assertEquals("/employee/addEmployee", mav.getViewName());
            String msg = (String) request.getAttribute("msg");
            System.out.println(msg);
        }
    
    }

    需要改动的代码: 
    33行,按照自己要读取的spring配置进行修改。 
    61到81行,写自己的单元测试方法。

  • 相关阅读:
    前端如何进阶架构师
    NPOI使用记录
    ArcGis 中空间数据的插入与更新
    (转载).net 缓存处理
    ASP.NET(c#)实现重定向的三种方法的总结
    数据库关联表之间的更新语句
    C#net多线程多文件压缩下载
    关于写文件流的情况
    C# Class获取项目的绝对路径
    C# .net中DatailsView的JS简易版
  • 原文地址:https://www.cnblogs.com/shihaiming/p/6703157.html
Copyright © 2020-2023  润新知