温馨提示×

怎么给Spring3 MVC中的Action做JUnit单元测试

发布时间:2021-09-18 18:35:39 来源:亿速云 阅读:88 作者:小新 栏目:开发技术

这篇文章给大家分享的是有关怎么给Spring3 MVC中的Action做JUnit单元测试的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

使用了spring3 MVC后,给action做单元测试也很方便,我以前从来不给action写单元测试的,再在不同了,方便了,所以一定要写。

JUnitActionBase类是所有JUnit的测试类的父类

package test;    import javax.servlet.http.HttpServletRequest;    import javax.servlet.http.HttpServletResponse;    import org.junit.BeforeClass;    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;    /**    * 说明: JUnit测试action时使用的基类   *    * @author  赵磊   * @version 创建时间:2011-2-2 下午10:27:03     */     public class JUnitActionBase {        private static HandlerMapping handlerMapping;        private static HandlerAdapter handlerAdapter;        /**        * 读取spring3 MVC配置文件        */        @BeforeClass     public static void setUp() {            if (handlerMapping == null) {                String[] configs = { "file:src/springConfig/springMVC.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;        }    }

更多关系Spring的信息

Spring 论坛  http://www.itchm.com/forum-59-1.html

这是个JUnit测试类,我们可以new Request对象,来参与测试,太方便了。给request指定访问的URL,就可以请求目标Action了。

package test.com.app.user;    import org.junit.Assert;    import org.junit.Test;    import org.springframework.mock.web.MockHttpServletRequest;    import org.springframework.mock.web.MockHttpServletResponse;    import org.springframework.web.servlet.ModelAndView;        import test.JUnitActionBase;        /**    * 说明: 测试OrderAction的例子   *    * @author  赵磊    * @version 创建时间:2011-2-2 下午10:26:55     */         public class TestOrderAction extends JUnitActionBase {        @Test        public void testAdd() throws Exception {        MockHttpServletRequest request = new MockHttpServletRequest();            MockHttpServletResponse response = new MockHttpServletResponse();            request.setRequestURI("/order/add");            request.addParameter("id", "1002");            request.addParameter("date", "2010-12-30");            request.setMethod("POST");            // 执行URI对应的action            final ModelAndView mav = this.excuteAction(request, response);            // Assert logic            Assert.assertEquals("order/add", mav.getViewName());            String msg=(String)request.getAttribute("msg");            System.out.println(msg);        }    }

需要说明一下 :由于当前最想版本的Spring(Test) 3.0.5还不支持@ContextConfiguration的注解式context file注入,所以还需要写个setUp处理下,否则类似于Tiles的加载过程会有错误,因为没有ServletContext。3.1的版本应该有更好的解决方案。

感谢各位的阅读!关于“怎么给Spring3 MVC中的Action做JUnit单元测试”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

免费拨打  400 100 2938 免费拨打 400 100 2938
24小时售后技术支持 24小时售后技术支持
返回顶部 返回顶部