在SpringMVC利用MockMvc進行單元測試


spring在線文檔:https://docs.spring.io/spring/docs/current/javadoc-api/index.html?index-files/index-13.html

----------------------------------------------------------------------------------------------------------------

一、應用示例

package com.springapp.mvc;

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.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.web.context.WebApplicationContext;

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
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.result.MockMvcResultMatchers.view;
import static org.springframework.test.web.servlet.setup.MockMvcBuilders.webAppContextSetup;

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration("file:src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml")
public class AppTests {
    private MockMvc mockMvc;

    @SuppressWarnings("SpringJavaAutowiringInspection")
    @Autowired
    protected WebApplicationContext wac;

    @Before
    public void setup() {
        this.mockMvc = webAppContextSetup(this.wac).build();//獲取mockMvc實例
    }

    @Test
    public void simple() throws Exception {
        mockMvc.perform(post("/mytest"))//執行一個RequestBuilder請求
                .andExpect(view().name("index2"))//驗證返回視圖是否是"index2"
                .andDo(print()).andExpect(status().isOk());//打印結果到控制台
    }


}

 

二、代碼解釋

@WebAppConfiguration

http://docs.spring.io/spring/docs/3.2.x/javadoc-api/org/springframework/test/context/web/WebAppConfiguration.html中有這樣的解釋:

@WebAppConfiguration is a class-level annotation that is used to declare that the ApplicationContext loaded for an integration test should be a WebApplicationContext.

其中文意思是:“@webappconfiguration是一級注釋,用於聲明一個ApplicationContext集成測試加載WebApplicationContext。

 

private MockMvc mockMvc;

https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/test/web/servlet/MockMvc.html中這樣解釋:

Main entry point for server-side Spring MVC test support.

其中文意思是:對於服務器端的Spring MVC測試支持主入口點。

該對象可以由方法webAppContextSetup(WebApplicationContext context).build()構造。

 

org.springframework.test.web.servlet.setup.MockMvcBuilders

先介紹些:MockMvcBuilder,MockMvcBuilder是用來構造MockMvc的構造器,其主要有兩個實現:StandaloneMockMvcBuilder和DefaultMockMvcBuilder,分別對應之前的兩種測試方式。對於我們來說直接使用靜態工廠MockMvcBuilders創建即可(注:MockMvcBuilders在官方文檔中並未找到):

MockMvcBuilders.webAppContextSetup(WebApplicationContext context):指定WebApplicationContext,將會從該上下文獲取相應的控制器並得到相應的MockMvc

MockMvcBuilders.standaloneSetup(Object... controllers):通過參數指定一組控制器,這樣就不需要從上下文獲取了。

 

simple方法中的代碼中的方法:

perform:執行一個RequestBuilder請求,會自動執行SpringMVC的流程並映射到相應的控制器執行處理;

andExpect:添加ResultMatcher驗證規則,驗證控制器執行完成后結果是否正確;

andDo:添加ResultHandler結果處理器,比如調試時打印結果到控制台;

 

后記:更多參加spring的官方文檔

 

附:另一種測試

package com.spring.test;

import com.wql.dao.UserMapper;
import com.wql.vo.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import javax.annotation.Resource;

/**
 * Created by Administrator on 15-12-11.
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring.xml")
public class SqlTests {
    @Resource
    private UserMapper userMapper;

    @Test
    public  void test(){
        User u =  userMapper.selectByPrimaryKey(1);
        System.out.println(u);
    }

    @Test
    public void test2(){
        User u = new User();
        u.setName("wang");
        u.setPassword("112");
        System.out.println(userMapper.checkLogin(u));
    }

}

 

 

 

 
        

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM