1. 程式人生 > >Mock測試SpringMvc Controller 層的例子.

Mock測試SpringMvc Controller 層的例子.

result write framework pes fast cnblogs json http java

spring version : 4.1.6.RELEASE

Junit version : 2.4.5

package com.shiji.soc.es.controller;

import static org.junit.Assert.*;

import java.io.UnsupportedEncodingException;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.ResultActions;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.shiji.soc.es.dao.SocDao;
import com.shiji.soc.es.dto.SocField;
import com.shiji.soc.es.dto.SocRequest;
import com.shiji.soc.es.enums.FieldType;
import com.shiji.soc.es.service.SocService;

@SuppressWarnings("rawtypes")
@ContextConfiguration({ "classpath:spring/soc-applicationContext.xml", "classpath:spring/soc-springmvc.xml" })
@RunWith(SpringJUnit4ClassRunner.class)
public class SocControllerTest {
    private static ObjectMapper MAPPER = new ObjectMapper();
    @Autowired
    SocDao socDao;
    @Autowired
    SocService socService;

    @Autowired
    SocController socController;
    protected MockMvc mockMvc;

    @Before
    public void setup() {
        mockMvc = MockMvcBuilders.standaloneSetup(socController).build();
    }

    @Test
    public void testPostMethod() throws Exception {
        String queryJson = this.getQueryJson();
        MvcResult andReturn = mockMvc
                .perform(//
                        MockMvcRequestBuilders//
                                .post("/query")//
                                .contentType(MediaType.APPLICATION_JSON)//
                                .content(queryJson)//
                                .accept(MediaType.APPLICATION_JSON)) // 執行請求
                .andReturn();
        MockHttpServletResponse response = andReturn.getResponse();
        // response.getContentAsString(); 就是服務器controller 返回的json 字符串.
        // response.getStatus(); http響應碼 200之類.
        // response.getCookies();  服務器返回的Cookie[] 
        this.piringAndAssert(response);
    }

    @Test
    public void testGetMethod() throws Exception {
        System.out.println("socDao is null ? " + (socDao == null));
        System.out.println("socService is null ? " + (socService == null));
        System.out.println("socController is null ? " + (socController == null));
        System.out.println("mockMvc is null ? " + (mockMvc == null));

        MvcResult mvcResult = this.mockMvc.perform(//
                MockMvcRequestBuilders.get("/query")//
        ).andReturn();

        MockHttpServletResponse response = mvcResult.getResponse();
        String result = response.getContentAsString();
        System.out.println("=====resp :\n" + result);
        // System.out.println(mvcResult.getResponse().getStatus());
        System.out.println("status : " + response.getStatus());
        System.out.println("cookies  : " + Arrays.asList(response.getCookies()));

        System.out.println(response);
    }

    private void piringAndAssert(MockHttpServletResponse response) {

        try {
            System.out.println("###status : " + response.getStatus());
            String contentAsStrin = null;
            contentAsStrin = response.getContentAsString();

            System.out.println(contentAsStrin);

            Map readValue = MAPPER.readValue(contentAsStrin, Map.class);

            List list = (List) readValue.get("results");
            if (list == null) {
                System.out.println("###result is null !! ");
            } else {
                for (Object object : list) {
                    System.out.println(object);
                }
            }

            System.out.println("###page =" + readValue.get("page"));
            System.out.println("###size =" + readValue.get("size"));
            System.out.println("###count =" + readValue.get("count"));
            System.out.println("###respCode =" + readValue.get("respCode"));
            System.out.println("###respText =" + readValue.get("respText"));
            System.out.println("###errorCode =" + readValue.get("errorCode"));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private String getQueryJson() {
        HashSet<String> set = new HashSet<String>();
        set.add("apiPassword10030");
        set.add("apiPassword10064");
        set.add("apiPassword10142");
        set.add("apiPassword10129");

        SocRequest bean = new SocRequest();

        List<SocField> query = Arrays.asList(//
                new SocField("groupId", FieldType.MATCH.getType(), 0), //
                new SocField("apiPassword", FieldType.SET.getType(), set), //
                new SocField("txnDateTime", FieldType.RANGE.getType(), 1496817450449L, 1496817455610L)//
        );

        bean.setQuery(query);
        List<String> column = Arrays.asList("txnNo", "txnDateTime", "terId", "apiUser");

        bean.setColumns(column);

        bean.setPage(1);
        bean.setSize(20);
        String writeValueAsString = null;
        try {
            writeValueAsString = MAPPER.writeValueAsString(bean);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        return writeValueAsString;
    }

}

  

Mock測試SpringMvc Controller 層的例子.