SpringMVC Junit Demo

package com.zchx.test;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
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.MockHttpSession;
import org.springframework.test.annotation.Rollback;
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.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.ResultActions;
import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultHandlers;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.context.WebApplicationContext;

import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;

/**
 * 测试类
 * 
 * @version V1.0
 * @author songxiaotong
 * @date 2018年6月28日 下午2:10:46
 * @Description
 */
@SuppressWarnings("deprecation")
@RunWith(SpringJUnit4ClassRunner.class)
// 设置读取的spring配置文件
@ContextConfiguration({ "classpath*:servlet-context.xml" })
// 当然 你可以声明一个事务管理 每个单元测试都进行事务回滚 无论成功与否
// @TransactionConfiguration(defaultRollback = true)
@Rollback(value = true)
@Transactional
@WebAppConfiguration
public class MyTest2 {

    /**
     * 日志记录工具
     */
    private static final Logger LOGGER = LogManager.getLogger(MyTest2.class);

    /**
     * WebApplicationContext
     */
    @Autowired
    private WebApplicationContext wac;

    private MockMvc mockMvc;

    /**
     * 初始化mvc请求对象
     * 
     * @throws Exception
     */
    @Before
    public void setUp() throws Exception {
        this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
    }

    @Test
    public void test() {
        try {
            MockHttpSession session = new MockHttpSession();

            JSONObject param = new JSONObject();
            param.put("test1", "1");
            param.put("test2", "2");
            param.put("test3", "3");

            MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/zchx/test/test");
            requestBuilder.contentType(MediaType.APPLICATION_JSON);

            requestBuilder.content(JSONObject.toJSONString(param, SerializerFeature.WriteMapNullValue));
            // requestBuilder.content(param.toString());

            requestBuilder.session(session);

            // 执行一个请求;
            ResultActions result = mockMvc.perform(requestBuilder);

            // 添加执行完成后的断言
            result.andExpect(MockMvcResultMatchers.status().isOk());

            // 添加一个结果处理器,表示要对结果做点什么事情,比如此处使用MockMvcResultHandlers.print()输出整个响应结果信息。
            result.andDo(MockMvcResultHandlers.print());

            // 表示执行完成后返回相应的结果。
            MvcResult mvcResult = result.andReturn();

            LOGGER.info(mvcResult.getResponse().getContentAsString());
        } catch (Exception e) {
            LOGGER.error(e.getMessage());
        }
    }

}

 

posted @ 2017-04-22 12:01  不知名的宋某某  阅读(124)  评论(0编辑  收藏  举报