`
蛤蟆仙人
  • 浏览: 117773 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

junit 测试spring mvc Controller

 
阅读更多

Controller

 

@Controller
public class DataSourceService  {

  @RequestMapping(value = "/bb/aa/{dataSource}", method = RequestMethod.GET)
    public void datasource(HttpServletRequest request, HttpServletResponse response,
            @PathVariable("dataSource") String dataSource) throws Exception {
        String result = "结果为";
        
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        out.write(result + dataSource);
        out.close();
        
    }
}

测试的基类

 

import java.io.File;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;

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;

/**
 * @ClassName: JUnitActionBase
 * @Description: 这里用一句话描述这个类的作用
 *
 */
public class JUnitActionBase {
    private static HandlerMapping handlerMapping;
    private static HandlerAdapter handlerAdapter;
    
    /** 
     * 读取spring3 MVC配置文件 
     * @throws UnsupportedEncodingException 
     */
    @BeforeClass
    public static void setUp() throws UnsupportedEncodingException {
        if (handlerMapping == null) {
            File file = new File(Thread.currentThread().getContextClassLoader().getResource("").getPath());
            String separator = File.separator;
            String path = URLDecoder.decode(file.getAbsolutePath(), "utf-8").replace("", "").replace("\\", "/");
            String[] configs = { "file:" + path + separator + "hy-spring-servlet.xml",
                    "file:" + path + separator + "hy-spring.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;
    }
}

 测试类

 

public class DataSourceServiceTest extends JUnitActionBase {

    @Test
    public void testJSONDataSourceServiceSQL() throws Exception {
        
        MockHttpServletRequest request = new MockHttpServletRequest();
        MockHttpServletResponse response = new MockHttpServletResponse();
        
        request.setRequestURI("/bb/aa/hehe");
        
        request.addParameter("P_RQ", "2011-11-29");
        
        request.setMethod("GET");
        
        // 执行URI对应的action  
        this.excuteAction(request, response);
        String result = response.getContentAsString();
        Assert.assertNotNull(result);
        
    }
}
分享到:
评论
7 楼 flying3615 2014-04-19  
在spring305上也遇到了这个exception,耽误了好半天
结果发现是需要在springmvc的配置文件里指定
<mvc:default-servlet-handler default-servlet-name="DMS_MVC"/>

DMS_MVC就是web.xml里面default的servletname,好像也可以随便给个
spring DefaultServletHttpRequestHandler api有下面这个话
估计是load web.xml的时候没读进来这个default name
In most cases, the defaultServletName does not need to be set explicitly, as the handler checks at initialization time for the presence of the default Servlet of well-known containers such as Tomcat, Jetty, Resin, WebLogic and WebSphere. However, when running in a container where the default Servlet's name is not known, or where it has been customized via server configuration, the defaultServletName will need to be set explicitly.
6 楼 limcosln1andx 2012-08-03  
哎,我自己的那个controller test 基本和 http://xebee.xebia.in/2012/05/22/spring-mvc-controller-testing-the-right-and-easy-way/ 文章中的第一种方法差不多。不过封装了一个基类。
最近,又突然发现了个问题,直接使用handlderMapping查找handler处理请求,会漏掉很多东西,例如interceptor,事务管理等。越搞越复杂哎。
想了想,还是用spring-test-mvc比较好。
我打算再深入研究一下,还有很多问题,比如测试数据导入和清空,测试时模拟用户登陆。希望能解决这些问题,在分享给大家。 
5 楼 cricket1981 2012-06-27  
其实测试spring mvc controller有一个更好更简洁的办法,参考http://xebee.xebia.in/2012/05/22/spring-mvc-controller-testing-the-right-and-easy-way/
4 楼 蛤蟆仙人 2012-06-25  
把你的分享下  呵呵
3 楼 limcosln1andx 2012-06-18  
问题解决啦,感谢楼主啦,我研究了spring源码,封装了一个功能更多的测试基类,支持我们写的spring controller的测试
2 楼 蛤蟆仙人 2012-05-15  
检查下 应该是配置文件的错误吧?
1 楼 limcosln1andx 2012-05-08  
好文章啊!
不过我照着做的时候报错,帮忙看一下哪的问题把(我对spring的原理不熟)

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler#0': Initialization of bean failed; nested exception is java.lang.IllegalStateException: Unable to locate the default servlet for serving static content. Please set the 'defaultServletName' property explicitly.
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:527)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:293)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:290)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:192)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:585)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425)
at com.ginkgocap.ywxt.utils.JUnitActionBase.setUp(JUnitActionBase.java:49)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27)
at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.lang.IllegalStateException: Unable to locate the default servlet for serving static content. Please set the 'defaultServletName' property explicitly.
at org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler.setServletContext(DefaultServletHttpRequestHandler.java:104)
at org.springframework.web.context.support.ServletContextAwareProcessor.postProcessBeforeInitialization(ServletContextAwareProcessor.java:75)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:394)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1413)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
... 24 more

相关推荐

    spring MVC junit 单元测试(controller)

    这篇博客主要探讨了如何使用JUnit进行Spring MVC Controller的单元测试。在实际开发中,单元测试可以帮助我们尽早发现潜在的问题,提高软件的可靠性和可维护性。 首先,让我们了解Spring MVC的基本概念。Spring MVC...

    junit针对spring mvc三层测试

    总结来说,使用JUnit针对Spring MVC的三层进行测试,我们需要: 1. 测试表现层(Controller),验证HTTP请求处理和视图渲染。 2. 测试业务层,确保业务逻辑的正确性和依赖隔离。 3. 测试服务数据访问层,验证数据库...

    单元测试案例junit +spring mvc +springboot

    JUnit作为Java领域最流行的单元测试框架,与Spring MVC和Spring Boot的集成使得开发者能够更高效地进行测试驱动开发(TDD)或行为驱动开发(BDD)。下面将详细介绍这个主题中的相关知识点。 1. JUnit JUnit是一个...

    spring mvc的简单单元测试

    Spring MVC 是一个强大的Java web开发框架,用于构建可维护、可扩展的...总之,通过正确使用JUnit、Mockito、Spring Test以及MockMVC,我们可以编写出全面、有效的Spring MVC单元测试,确保代码质量并降低潜在的bug。

    Spring MVC 教程快速入门 深入分析

    十三、如何给Spring3 MVC中的Action做JUnit单元测试:说明了如何对Spring MVC中的控制器进行单元测试,包括配置测试环境和编写测试代码。 十四、Spring MVC转发与重定向:详细讲解了在Spring MVC中如何使用转发和...

    Spring MVC Cookbook(PACKT,2016).pdf

    13. **测试Spring MVC应用**:理解如何编写JUnit测试用例,使用MockMVC模拟HTTP请求,以及进行集成测试。 14. **Spring Security**:如果书中涉及,会讲解如何集成Spring Security进行身份验证和授权,保护应用程序...

    Spring MVC简单例子

    10. **单元测试和集成测试**:学习如何使用JUnit和Mockito等工具对Controller和Service层进行单元测试,以及使用Spring Test对整个应用进行集成测试。 通过这个简单的例子,初学者可以全面地了解Spring MVC的工作...

    Spring+Spring MVC+Spring JDBC+MySql实现简单登录注册

    在本项目中,我们主要利用Spring框架,包括其核心模块Spring、MVC模块Spring MVC以及数据访问/集成模块Spring JDBC,结合MySQL数据库来构建一个基础的登录注册系统。以下是这个项目涉及的关键技术点: 1. **Spring...

    Spring MVC与MYBatis企业应用实战.pdf

    - 单元测试:使用JUnit和Mockito测试Controller、Service和DAO层的功能。 总之,《Spring MVC与MYBatis企业应用实战》将引导读者深入理解这两种技术的结合,提供实际项目中的解决方案,帮助开发者在企业级应用开发...

    spring mvc demo加用户模块的

    9. **测试**:为了保证代码质量,项目可能包含单元测试和集成测试,使用JUnit、Mockito等工具对用户模块的功能进行验证。 通过这个“spring mvc demo加用户模块的”项目,开发者可以学习如何组织Spring MVC的项目...

    spring mvc+spring+maven框架项目,纯净项目

    Spring MVC是Spring框架的一部分,是一个用于构建Web应用的轻量级MVC(Model-View-Controller)框架。它提供了模型绑定、数据验证、RESTful支持、异常处理等特性,帮助开发者更有效地组织和管理控制器逻辑。Spring ...

    spring 与 spring mvc 整合 配置讨论

    10. **测试**:Spring提供了JUnit支持,可以方便地对Service和Controller进行单元测试,确保代码质量。 以上就是Spring与Spring MVC整合配置的一些基础知识,实际应用中还需要考虑安全性、性能优化等因素。通过不断...

    spring mvc

    #### 十三、JUnit 单元测试 Spring MVC 控制器 为了确保控制器的正确性,可以编写 JUnit 测试用例来进行单元测试。通常会使用 Spring Test 模块提供的 `MockMvc` 类来模拟 HTTP 请求,并验证控制器的行为。 #### ...

    spring mvc mybatis 整合 maven

    10. 测试:编写JUnit测试类,对Service层的增删改查方法进行单元测试,确保功能正常。 总结,Spring MVC、MyBatis与Maven的整合能够帮助开发者高效地构建Web应用,通过Maven管理项目依赖,Spring MVC负责请求分发和...

    第二章 Spring MVC 增改查实例

    3. **JUnit**:单元测试框架,测试控制器、Service 和 DAO。 4. **H2/MySQL**:数据库,用于存储和查询数据。 5. **Postman**:HTTP 客户端,用于发送请求和验证响应。 ### 五、源码分析 1. **Controller**:观察 ...

    spring mvc demo下载地址

    7. **单元测试和集成测试**:查看项目中的测试类,学习如何使用JUnit和Mockito进行测试。 通过深入研究这个Spring MVC demo,你将能掌握基本的Spring MVC工作流程,为后续更复杂的Web应用开发打下坚实基础。记得...

    spring mvc demo

    可以使用 MockMVC 进行 Spring MVC 的模拟测试,对于 Mybatis,可以通过 JUnit 和 Mockito 测试数据库操作。 通过这种整合,开发者可以在 Spring MVC 的控制层直接注入 Mybatis 的 DAO 对象,简化了代码的编写,...

    Spring MVC框架的各种依赖包下载

    在实际开发中,可能还需要根据项目需求添加其他库,如测试框架(JUnit、Mockito)、缓存框架(Ehcache、Redis)、消息队列(RabbitMQ、Kafka)等。在使用Maven或Gradle等构建工具时,可以通过指定对应的依赖坐标自动...

    综合spring mvc + spring + hibernate + bootstrap开发图书管理系统

    **Spring MVC** 是Spring框架的一部分,主要用于构建Web应用程序的Model-View-Controller(MVC)架构。Spring MVC通过解耦控制器、服务、模型和视图,使得代码更易于维护和测试。在本系统中,它负责处理HTTP请求,...

Global site tag (gtag.js) - Google Analytics