springmvc-sprinmvc 怎么进行单元测试?

问题描述

sprinmvc 怎么进行单元测试?

项目springmvc + mybatis,用maven搭的框架,现在要对controller层进行单元测试,
请问怎么测,给下思路?其他方法都是用junit来测,现在controller是不是要模拟HTTP请求。
研究了下mokito等测试框架,弄不出来。谢谢!

解决方案

mock主要是帮助你模拟一些不容易被构建的函数、类或者接口。我这有个简单的小例子,你可以参考。我用easymock测试 ,官网:http://www.easymock.org/
被测试类:
package controller;

import java.io.IOException;

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

import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import po.User;
import service.UserService;

@Controller
public class UserController{

@Autowired
private UserService userService;

public void setUserService(UserService userService) {
    this.userService = userService;
}

@RequestMapping(value="getUser")
public void handleRequest(HttpServletRequest request,HttpServletResponse response) throws IOException{
    String id = request.getParameter("id");
    if(StringUtils.isBlank(id)){
        response.getWriter().write("1");
        return;
    }

    User user = null;
    try{
        user = userService.getUserById(Long.valueOf(id));
    }catch(RuntimeException e){

    }

    if(user == null){
        response.getWriter().write("2");
        return;
    }

    response.getWriter().write(user.getName());
}

}

测试代码:
package controller;

import static org.junit.Assert.*;

import java.io.IOException;
import java.io.PrintWriter;

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

import static org.easymock.EasyMock.*;

import org.easymock.IMocksControl;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import po.User;
import service.UserService;

public class UserControllerTest {
private HttpServletRequest request;
private HttpServletResponse response;
private PrintWriter pw;
private UserController uc;
private IMocksControl ic;
private UserService userService;

@Before
public void setUp(){
    uc = new UserController();
    ic = createControl();
    request = ic.createMock(HttpServletRequest.class);
    response = ic.createMock(HttpServletResponse.class);
    pw = ic.createMock(PrintWriter.class);
    userService = ic.createMock(UserService.class);
    uc.setUserService(userService);
}

@After
public void tearDown(){
    ic.verify();
}

@Test
public void testIdIsNull() throws IOException {
    expect(request.getParameter("id")).andReturn(null);
    expect(response.getWriter()).andReturn(pw);
    pw.write("1");
    expectLastCall().once();
    ic.replay();;
    uc.handleRequest(request, response);
}

@Test
public void testThrowException() throws IOException {
    expect(request.getParameter("id")).andReturn("1");
    expect(userService.getUserById(1)).andThrow(new RuntimeException());
    expect(response.getWriter()).andReturn(pw);
    pw.write("2");
    expectLastCall().once();
    ic.replay();;
    uc.handleRequest(request, response);
}

@Test
public void test() throws IOException {
    expect(request.getParameter("id")).andReturn("1");
    User user = new User(1, "fuhaiq");
    expect(userService.getUserById(1)).andReturn(user);
    expect(response.getWriter()).andReturn(pw);
    pw.write(user.getName());
    expectLastCall().once();
    ic.replay();;
    uc.handleRequest(request, response);
}

}

时间: 2024-10-27 19:28:33

springmvc-sprinmvc 怎么进行单元测试?的相关文章

请教:SpringMVC JPA 事务,单元测试通过,控制器不开启事务,如何解决

问题描述 我的项目情况如下: 1.使用Springmvc 3.0.5 Hibernate3.5.6 JPA,配置persistence.xml使用mysql: 2.使用Dao.Daosupport,Service.ServiceBean,web.xml中,使用OpenEntityManagerInViewFilter; 3.在使用Junit4做单元测试时,保存数据可以通过,但是控制器中,无法保存数据,错误如下:--控制器中先执行了一次查询操作,这是操作完成的提示:DEBUG org.hibern

springmvc单元测试异常

问题描述 springmvc单元测试异常 springmvc采用了注解方式,利用ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); context.getBean("");怎么去获得到对应的实例?

SpringMVC,MyBatis项目中兼容Oracle和MySql的解决方案及其项目环境搭建配置、web项目中的单元测试写法、HttpClient调用post请求等案例

 要搭建的项目的项目结构如下(使用的框架为:Spring.SpingMVC.MyBatis): 2.pom.xml中的配置如下(注意,本工程分为几个小的子工程,另外两个工程最终是jar包): 其中pom.xml中的内容如下,其中${ip}为ip地址: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"

架构之路之spring+springmvc+maven+mongodb的搭建(转载:http://blog.csdn.net/tomcat_2014/article/details/55100130)

1.前言       最近项目开发使用到了spring+springmvc+maven+MongoDB,项目中的框架是用springboot进项开发的,对于我们中级开发人员来说,有利有弊,好处呢是springboot开发减少了很多配置文件,同时也使开发更加规范快捷,但是,不好的地方就是长此以往,我们就在码农的道路上越走越远...      所以,为了抵制码农的身份,在工作之余自己亲手由零一点一点搭建了这个框架,当然框架暂时只包含基本的东西,但是千里之行始于足下,良好的开始就是成功的一半,我会在以

Spring MVC入门 —— 跟开涛学SpringMVC

2014-05-14 23:22:27 第二章 Spring MVC入门 -- 跟开涛学SpringMVC  浏览(84979)|评论(12)   交流分类:Java|笔记分类: 跟开涛学Spring--  2.1.Spring Web MVC是什么 Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring

Maven+Mybatis+Spring+SpringMVC实现分页查询(附源码)

版权声明:本文为博主原创文章,转载注明出处http://blog.csdn.net/u013142781 目录(?)[+] 下面小宝鸽将分享一篇Mybatis分页功能的博文,下面将给出详细的步骤,跟着博主的节奏肯定能实现.另外最后还会附上整个工程的源码.如果是没有使用过maven的猿友可自行下载相关的jar包即可. 一.项目搭建 关于项目搭建,小宝鸽以前写过一篇Spirng+SpringMVC+Maven+Mybatis+MySQL项目搭建,这篇文章提供了详细的搭建过程,而且提供了源码下载,接下

Maven搭建SpringMVC+Hibernate项目详解(转)

  前言      今天复习一下SpringMVC+Hibernate的搭建,本来想着将Spring-Security权限控制框架也映入其中的,但是发现内容太多了,Spring-Security的就留在下一篇吧,这篇主要搭建SpringMVC4.1.4和Hibernate4.3.8,之前也打了好多SpringMVC的,这部分已经非常的熟悉了,毕竟业开发过一年多SpringMVC的,这次持久层采用Hibernate,数据源采用c3p0,数据库暂采用MySQL,主要是想复习一下Hibernate.搭

SpringMVC前传

在我们熟知的建立在三层结构(表示层.业务逻辑层.持久层)基础之上的J2EE应用程序开发之中,表示层的解决方案最多.因为在表示层自身的知识触角很多,需要解决的问题也不少,这也就难免造成与之对应的解决方案层出不穷.  笔者在很多讨论中经常可以看到类似"某某框架已死",或者"某某框架已经足以打败所有其他的框架"的言论.事实上,每一种解决方案都有着自身独有的存在价值和历史背景.如果单单从某一个方面或者某几个方面去看一个框架,那么评论难免有失偏颇.  所以,整个系列的第一篇文

maven分模块web项目的单元测试

问题描述 maven分模块web项目的单元测试 50C 最近几天搞了个maven分模块的web项目的小demo.springMVC+spring+mybatis.总配置文件写在web模块中.web模块依赖service模块,service模块依赖dao模块,dao模块中有实体类和maping配置文件和dao接口.现在想分层进行单元测试.求大神指导 .在线等. 解决方案 MAVEN WEB项目 单元测试 解决方案二: 已经分模块了,各个模块用各个模块的单元测试 . 解决方案三: 用 junit @