`

spring MVC junit 单元测试(controller)

阅读更多
新建一个基类:

package test;

/**
  *
*/


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.junit.Before;
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;

/**
  * @author zbb
  *
*/
public class BaseTest<T> {
     public XmlWebApplicationContext ctx;
    

    private HandlerMapping handlerMapping;
     private HandlerAdapter handlerAdapter;

    /**
      * 容器初始化
      *
     * @author zbb
      * @throws Exception
      */
     @Before
     public void setUp() throws Exception {
         // change by xiaokang.zh
         String[] paths = { "file:WebContent/WEB-INF/temp-servlet.xml" };
         ctx = new XmlWebApplicationContext();
         ctx.setConfigLocations(paths);
         MockServletContext msc = new MockServletContext();
         ctx.setServletContext(msc);
         ctx.refresh();
         msc.setAttribute(
                 WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE,
                 ctx);
         handlerMapping = (HandlerMapping) ctx
                 .getBean(DefaultAnnotationHandlerMapping.class);
         handlerAdapter = (HandlerAdapter) ctx.getBean(ctx
                 .getBeanNamesForType(AnnotationMethodHandlerAdapter.class)[0]);
     }

    /**
      * 获取spring 的bean
      *
     * @author zbb
      * @param cl
      * @param name1
      * @return
      * @throws Exception
      */
     @SuppressWarnings("unchecked")
     protected T getBean(Class<T> cl, String... name1) throws Exception {
         String name = "";
         T t = null;
         if (name1 != null && name1.length > 0)
             name = name1[0];
         else {
             name = cl.getSimpleName();
             name = name.substring(0, 1).toLowerCase().concat(name.substring(1));
         }
         t = (T) ctx.getBean(name);
         return t;
     }

    /**
      * 用来进行Controller的测试,执行request对象的action 示例如下: 继承该类后,可以使用以下代码进行action的测试
      * request.setRequestURI("/order/add"); request.addParameter("id", "1002");
      * request.addParameter("date", "2010-12-30"); request.setMethod("POST");
      * final ModelAndView mav = this.excuteAction(request, response);//
      * 执行URI对应的action Assert.assertEquals("order/add", mav.getViewName());
      * String msg=(String)request.getAttribute("msg");
      *
     * @param request
      * @param reponse
      * @return
      * @throws Exception
      */
     protected ModelAndView excuteAction(HttpServletRequest request,
             HttpServletResponse response) throws Exception {
         HandlerExecutionChain chain = handlerMapping.getHandler(request);
         final ModelAndView model = handlerAdapter.handle(request, response,
                 chain.getHandler());
         return model;
     }
}


测试controller类

/**
  *
*/
package test;

import org.junit.Before;
import org.junit.Test;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;

import com.gangyi.crm.controller.SpringMVCtest;

/**
  * @author yangkun
  *
  */
public class ControllerTest extends BaseTest<SpringMVCtest> {
     public MockHttpServletRequest request;
     public MockHttpServletResponse response;
    
     @Before
     public void setUp() throws Exception{
         super.setUp();
         request=new MockHttpServletRequest();
         response=new MockHttpServletResponse();
     }
    
     @Test
     public void testTest(){
         request.setRequestURI("/springMVCtest.do");
         request.addParameter("method", "regist");
         request.setMethod("POST");
         try {
             this.excuteAction(request, response);
         } catch (Exception e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         }
     }



}


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


补充说明:

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

相关推荐

    spring mvc的简单单元测试

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

    junit针对spring mvc三层测试

    JUnit可以通过模拟HTTP请求和预期的响应来实现对Controller的单元测试。例如,我们可以创建一个MockMVC对象来模拟请求,并使用andExpect方法检查响应状态码、模型属性和视图名称。 其次,业务层是应用的核心,包含...

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

    综上所述,"单元测试案例junit +spring mvc +springboot"涉及的是使用JUnit进行单元测试,结合Spring MVC和Spring Boot的特点,对服务端代码进行详尽的验证,确保代码的稳定性和可靠性。通过合理的测试策略和工具,...

    springmvc项目搭建并实现Junit单元测试

    本教程将详细讲解如何搭建一个Spring MVC项目,并实现Junit单元测试,确保代码的质量。 首先,我们需要了解Spring MVC的基本构成。Spring MVC的核心组件包括DispatcherServlet、Controller、ViewResolver、...

    Spring的MOVE进行Junit单元测试

    在本篇文章中,我们将探讨如何利用Spring的MOVE(Model-View-Controller)架构以及JUnit库来执行单元测试。首先,我们需要理解Spring的MOVE架构: 1. **Model**:这是应用的核心业务逻辑部分,它处理数据和业务规则...

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

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

    Spring MVC非注解测试

    非注解测试在Spring MVC中是指不依赖于Java注解如`@Test`,`@Controller`等进行的测试,而是通过XML配置文件来定义组件和它们之间的关系。这种方式虽然比注解方式繁琐,但有助于理解Spring MVC的工作原理。 首先,...

    Spring MVC简单例子

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

    Spring Boot中的单元测试.pdf

    在Spring Boot中,单元测试是确保代码质量和可维护性的重要组成部分。通过单元测试,开发者能够独立验证代码的各个部分,确保它们按照预期工作,并在修改代码后快速发现潜在问题。Spring Boot为此提供了一系列便利...

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

    7. **测试**:`test`目录可能包含了项目的单元测试和集成测试,确保各个组件的正确性。例如,可以使用JUnit测试用户服务类的注册和登录功能。 8. **IDE相关文件**:`.classpath`、`.mymetadata`、`.project`、`....

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

    5. **src/test**: 测试代码目录,使用JUnit进行单元测试或集成测试。 项目结构遵循Maven的标准目录约定,使得代码组织清晰,易于维护。开发者可以在此基础上添加业务逻辑,扩展功能,或者结合其他Spring模块创建更...

    spring mvc demo加用户模块的

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

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

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

    spring mvc demo

    7. 测试:通过单元测试和集成测试确保功能的正确性。可以使用 MockMVC 进行 Spring MVC 的模拟测试,对于 Mybatis,可以通过 JUnit 和 Mockito 测试数据库操作。 通过这种整合,开发者可以在 Spring MVC 的控制层...

    spring 与 spring mvc 整合 配置讨论

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

    Spring MVC Cookbook(PACKT,2016).pdf

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

    spring mvc

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

    spring mvc demo下载地址

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

Global site tag (gtag.js) - Google Analytics