`
zhaoshijie
  • 浏览: 2261994 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring MVC 单元测试

 
阅读更多
关键字:Spring MVC 单元测试

下面一步一步带领大家实现spring MVC 单元测试:

新建一个基类:

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; 

public class JUnitActionBase { 
    private static HandlerMapping handlerMapping; 
    private static HandlerAdapter handlerAdapter; 
/**
  * 读取spring3 MVC配置文件
  */ 
  @BeforeClass 
public static void setUp() { 
        if (handlerMapping == null) { 
           String[] configs = { "classpath*:spring/*/*.xml","classpath*:applicationContext.xml","classpath:springMvc-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);
        // 这里需要声明request的实际类型,否则会报错
        request.setAttribute(HandlerMapping.INTROSPECT_TYPE_LEVEL_MAPPING, true);
        final ModelAndView model = handlerAdapter.handle(request, response,chain.getHandler()); 
        return model; 
    } 


/**
     * 执行request对象请求的action(针对没有返回值的action方法)
     * 
     * @param request
     * @param response
     * @return
     * @throws Exception
     */ 
    public void excuteActionWithJson(HttpServletRequest request, HttpServletResponse response) 
throws Exception { 
        HandlerExecutionChain chain = handlerMapping.getHandler(request);
        // 这里需要声明request的实际类型,否则会报错
        request.setAttribute(HandlerMapping.INTROSPECT_TYPE_LEVEL_MAPPING, true);
        handlerAdapter.handle(request, response,chain.getHandler()); 
    } 





}







定义测试controller类


package test;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.web.servlet.ModelAndView;

public class HelloActionTest extends JUnitActionBase {


/**
* 每个方法执行前
* @throws Exception
*/
@Before
    public void before() throws Exception{
        System.out.println("方法执行前...........");
    }

/**
* 每个方法执行后
* @throws Exception
*/
@After
    public void after() throws Exception{
System.out.println("方法执行后...........");
    }

    @Test 
    public void testAdd() throws Exception { 
    MockHttpServletRequest request = new MockHttpServletRequest(); 
        MockHttpServletResponse response = new MockHttpServletResponse();
//         request.setLocalPort(8080);
        request.setRequestURI("/w/postmodel"); 
        request.addParameter("id", "1002"); 
        //request.addParameter("date", "2010-12-30"); 
        request.setMethod("GET"); 
        // 执行URI对应的action 
        final ModelAndView mav = this.excuteAction(request, response); 
        // Assert logic 
        Assert.assertEquals("views/demo/postmodel", mav.getViewName());
       
//         String msg=(String)response.getAttribute("message"); 
        Object msg=mav.getModel().get("param"); 
        System.out.println(msg); 
    }


@Test 
    public void testGet() throws Exception { 
    MockHttpServletRequest request = new MockHttpServletRequest(); 
        MockHttpServletResponse response = new MockHttpServletResponse();
        request.setLocalPort(8080);//该选项可不设置
//         request.setServletPath("/strategy/page");//另一种设置url的方式
        request.setRequestURI("/strategy/page"); 
        request.addParameter("pageNo", "2"); 
        request.addParameter("pagesize", "20"); 
        request.setMethod("GET");
        request.setAttribute("msg", "测试action成功");
        // 执行URI对应的action 
        final ModelAndView mav = this.excuteAction(request, response); 
        // Assert logic 
        Assert.assertEquals("views/strategy/page", mav.getViewName());
       
//         String msg=(String)response.getAttribute("message"); 
        Object msg=mav.getModel().get("param"); 
        System.out.println(msg); 
        String msg2=(String)request.getAttribute("msg");
        System.out.println(msg2);
    }
}



说明:这里不再定义具体的控制层,你自己的写的控制类通过在测试类里面设置访问uri和相关参数即可



点击》run as或debug as》juint测试


补充说明:

需要测试dao层时,若是dao层包nullpointException,有可能是你的数据库连接datasource使用代理或是其他,则需要重新在spring的配置文件配置bean id=datasource,
分享到:
评论

相关推荐

    spring mvc的简单单元测试

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

    精通Spring MVC 4

    本书共计10章,分别介绍了快速搭建Spring Web应用、精通MVC结构、URL映射、文件上传与错误处理、创建Restful应用、保护应用、单元测试与验收测试、优化请求、将Web应用部署到云等内容,循序渐进地讲解了Spring MVC4...

    spring mvc jpa单元测试例子

    在Spring MVC和JPA的开发过程中,单元测试是不可或缺的一部分,它可以帮助我们验证代码的正确性,确保系统各个部分能够按预期工作。本例子聚焦于使用Spring的Test注解进行事务管理的单元测试,这对于数据库操作尤其...

    spring MVC junit 单元测试(controller)

    在Spring MVC框架中,单元测试是确保代码质量的重要步骤,特别是在控制器层(Controller)。这篇博客主要探讨了如何使用JUnit进行Spring MVC Controller的单元测试。在实际开发中,单元测试可以帮助我们尽早发现潜在...

    最全最经典spring-mvc教程

    Spring MVC提供了MockMVC,可以在不依赖服务器的情况下进行单元测试和集成测试。 这个"最全最经典spring-mvc教程"应该会详细讲解上述所有概念,并可能通过实例演示如何配置、创建和调试Spring MVC项目。对于想要...

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

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

    spring MVC快速入门-深入分析.pdf

    #### 七、Spring MVC 单元测试 - **JUnit 测试**:使用 JUnit 和 Mockito 等工具进行单元测试。 - **Mockito**:模拟 Controller 依赖的对象,以确保测试只关注 Controller 的逻辑。 #### 八、Spring MVC 前后端...

    spring MVC

    在"spring mvc 单元测试 - 记记更好 - 51CTO技术博客.mht"这篇文章中,可能详细介绍了如何设置和使用`MockMvc`进行单元测试,包括配置测试环境、编写测试用例以及断言结果等步骤。 在实际开发中,GuoLong(可能是指...

    junit针对spring mvc三层测试

    而JUnit作为Java领域最常用的单元测试框架,可以帮助开发者确保代码的质量和功能的正确性。本测试着重关注Spring MVC架构中的三层:表现层(Presentation Layer)、业务层(Business Logic Layer)和服务数据访问层...

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

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

    开发Spring MVC应用程序补充—程序源码下载.rar_spring_spring mvc_spring mvc 源码_sp

    9. **单元测试**:利用MockMVC进行Controller层面的单元测试。 10. **源码分析**:通过对Spring MVC源码的阅读和理解,学习其内部工作原理,提升问题排查和性能调优的能力。 以上就是基于提供的信息推测的Spring ...

    07. Spring Boot单元测试

    在Spring Boot框架中,单元测试是一项至关重要的任务,它能够帮助开发者确保代码的正确性和可靠性。Spring Boot提供了方便的工具和库,使得编写和执行单元测试变得简单高效。本章节我们将深入探讨Spring Boot中的...

    Spring MVC简单例子

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

    spring MVC_快速入门

    Spring MVC提供了MockMvc工具,可以在不启动服务器的情况下进行单元测试和集成测试。 这个“spring MVC_快速入门”文档可能涵盖了以上部分或全部内容,旨在帮助初学者快速理解Spring MVC的工作原理和基本用法。...

    spring mvc经典入门案例

    在 Spring 中,我们可以使用 `MockMvc` 工具进行单元测试,模拟 HTTP 请求并验证响应结果。 6. **实战案例** - 创建一个简单的 `HelloWorld` 控制器,使用 `@Controller` 注解标记,然后通过 `@RequestMapping` ...

    Spring MVC入门教程

    十三、如何给spring3 MVC中的Action做JUnit单元测试? 十四、spring mvc 转发与重定向 十五、spring mvc 处理ajax请求 十六、spring mvc 关于写几个配置文件的说明 十七、spring mvc 如何取得Spring管理的bean 十八...

Global site tag (gtag.js) - Google Analytics