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());
}
}
}