当前位置:首页 > 开发 > 编程语言 > Spring > 正文

利用junit对springMVC的Controller进行测试

发表于: 2015-04-07   作者:zhangzhaoaaa   来源:转载   浏览:
摘要:         平时对junit测试service/DAO层已经很熟悉不过了,如果不了解,可以猛戳这里,但是我们要测试controller层,不能总重启服务器吧,(重启tomcat好慢的飘过,别。。。别走啊),那么我们就用junit4模拟请求,测试controller层的方法。          代码1:直

        平时对junit测试service/DAO层已经很熟悉不过了,如果不了解,可以猛戳这里,但是我们要测试controller层,不能总重启服务器吧,(重启tomcat好慢的飘过,别。。。别走啊),那么我们就用junit4模拟请求,测试controller层的方法。

         代码1:直接Controller调用方法

         

import static org.junit.Assert.*;

import java.sql.SQLException;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.zz.login.web.LoginController;

/**
 * @author zhzh
 * 2015-4-7
 */
@RunWith(SpringJUnit4ClassRunner.class)  
@ContextConfiguration({"classpath*:/beans.xml","classpath*:/spring-mvc.xml"})  
public class TestController {

	// 模拟request,response  
    private MockHttpServletRequest request;  
    private MockHttpServletResponse response;   
      
    // 注入loginController  
    @Autowired  
    private LoginController loginController ;  
      
    // 执行测试方法之前初始化模拟request,response  
    @Before    
    public void setUp(){    
        request = new MockHttpServletRequest();      
        request.setCharacterEncoding("UTF-8");      
        response = new MockHttpServletResponse();      
    }         
    /** 
     *  
     * @Title:testLogin 
     * @Description: 测试用户登录   
     */  
    @Test  
    public void testLogin() {   
        try {  
        	request.setParameter("userName", "admin");
        	request.setParameter("password", "2");
            assertEquals("login",loginController.loginIn(request,response)) ;  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
}

    代码2:调用请求路径

 

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import static org.springframework.test.web.servlet.setup.MockMvcBuilders.webAppContextSetup;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.transaction.TransactionConfiguration;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.context.WebApplicationContext;

/**
 * @author zhzh
 * 2015-4-7
 */
@RunWith(SpringJUnit4ClassRunner.class)  
@WebAppConfiguration  
@ContextConfiguration({"classpath*:/beans.xml","classpath*:/spring-mvc.xml"}) 
//当然 你可以声明一个事务管理 每个单元测试都进行事务回滚 无论成功与否  
@TransactionConfiguration(defaultRollback = true)  
@Transactional 
public class TestController2 {
	@Autowired  
    private WebApplicationContext wac;  
  
    private MockMvc mockMvc; 
    
    @Before  
    public void setup() {   
        this.mockMvc = webAppContextSetup(this.wac).build();  
    } 
    
    @Test  
    public void testLogin() throws Exception {  
        mockMvc.perform((post("/loginTest").param("userName", "admin").param("password", "1"))).andExpect(status().isOk())  
                .andDo(print());  
    } 
    
    /*@Test  
    //有些单元测试你不希望回滚  
    @Rollback(false)  
	public void testInsert() throws Exception {  
	    mockMvc.perform((post("/insertTest"))).andExpect(status().isOk())  
	            .andDo(print());  
	} */
}

 

    注意:import static 的spring类

 

     代码3:

    LoginController代码片段

/**
	 * 登录入口
	 * @param request
	 * @param response
	 * @return
	 */
	@RequestMapping(value = "/loginTest", method = RequestMethod.POST)
	public String loginTest(HttpServletRequest request,HttpServletResponse response){
    	String account = request.getParameter("userName");
    	String password = request.getParameter("password");
    	if (account.equals("admin")&&password.equals("1")){
    		return "index";
    	}else{
    		return "login";
    	}
	}

 

参考:http://blog.csdn.net/a95473004/article/details/8926929

http://ysj5125094.iteye.com/blog/2082110

利用junit对springMVC的Controller进行测试

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
libs: 代码: package com.hibernate.demo.po; import org.hibernate.Session; import org.hibernat
这几天在做SpringMVC的项目,现在总结一下在测试的时候碰到的一些问题。 以前做项目,是在较新的MyEc
学习android. 看看是否可以和 junit一起使用.. 修改 AndroidManifest.xml <!-- We add an applic
学习android. 看看是否可以和 junit一起使用.. 修改 AndroidManifest.xml <!-- We add an applic
(绿色部分为转) 一.关于Junit 关于为什么junit.jar包不能放到lib/ext目录中: 先谈谈类装载器 java
一.关于Junit 关于为什么junit.jar包不能放到lib/ext目录中: 先谈谈类装载器 java虚拟机和程序都调
学习android. 看看是否可以和 junit一起使用.. 修改 AndroidManifest.xml <!-- We add an applic
  软件开发习惯中一个细微更改都可能会对软件质量产生巨大改进。将单元测试合并到开发过程中,然
打开IntelliJ IDEA工具,Alt+Ctrl+S,弹出窗口如下: 在文本框中输入Plugin进行插件搜索设置。 点击
利用 Ant 和 JUnit 进行增量开发(转载fromIBM) 软件开发习惯中一个细微更改都可能会对软件质量产生
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号