MockMvc

MockMvc

//classes = {SpringbootApplication.class}指定入口启动类
//webEnvironment = SpringBootTest.webEnvironment.RANDOM_PORT采用随机端口启动,不会产生端口占用问题
@SpringBootTest(classes = {SpringbootApplication.class},webEnvironment = SpringBootTest.webEnvironment.RANDOM_PORT)
@AutoConfigureMockMvc
public class MockMvcTestor{
	//利用@Resource注入MockMvc对象
	@Resource
	private MockMvc mockMvc ;
	@Test
	@DisplayName("文本响应测试用例")
	public void testMock1() throws Exception{
		//利用perform构建请求
		//MockMvcRequestBuilders请求的构建器
		//MockMvcRequestBuilders.get()
		//MockMvcRequestBuilders.post()
		MvcResult result = mockMvc.perform(MockMvcRequestBuilders.get("/logger"))
			.andExpect(MockMvcResultMatchers.status().isOk()) //MockMvcResultMatchers结果匹配器    预期
			.andDo(MockMvcResultHandlers.print()) //预期符合   MockMvcResultHandlers
			.andExpect(MockMvcResultMatchers.content().string("SUCCESS"))
			.andReturn() ;//真正的发送请求,执行
	}
	@Test
	@DisplayName("JSON响应测试用例")
	public void testMock2() throws Exception{
		mockMvc.perform(MockMvcRequestBuilders.get("/getHeader")
			.header("token","abcdw") //设置请求头  header("请求头名字","对应的值")
			.param("id","772") //请求参数设置
			).andExpect(MockMvcResultMatchers.ststus().isOk())
			.andDo(MockMvcResultHandlers.print())
			.andExpect(MockMvcResultMatchers.jsonPath("access_token").value("abcdw"))
			.andReturn()
	}
}
 public void getAllCategoryTest() throws Exception {
        String responseString = mockMvc.perform(
                get("/categories/getAllCategory")    //请求的url,请求的方法是get
                        .contentType(MediaType.APPLICATION_FORM_URLENCODED)  //数据的格式
               .param("pcode","root")         //添加参数
        ).andExpect(status().isOk()    //返回的状态是200
     //   .andExpect(jsonPath('$.status').value('success')
                ).andDo(print())         //打印出请求和相应的内容
                .andReturn().getResponse().getContentAsString();   //将相应的数据转换为字符串
        System.out.println("--------返回的json = " + responseString);
    }

1、注解

(1)@RunWith注解

  • 指定测试运行器,例如使用 SpringJUnit4ClassRunner.class

(2)@ContextConfiguration注解

  • 执行要加载的配置文件,例如 classpath:application.xml 或 file:src/main/resources/DispatcherServlet-servlet.xml

(3)@WebAppConfiguration注解

  • 用于声明测试时所加载的是WebApplicationContext【WebMVC的 XmlWebApplicationContext 是其实现类】

⑷ WebApplicationContext

  • WebMVC的IOC容器对象,需要声明并通过@Autowired自动装配进来

(5) 事务回滚

 @TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true) 
 @Transactional
  • 配置事务的回滚,对数据库的增删改都会回滚,便于测试用例的循环利用
  • 为什么要事务回滚?
    • 测试过程对数据库的操作,会产生脏数据,影响我们数据的正确性
    • 不方便循环测试,即假如这次我们将一个记录删除了,下次就无法再进行这个Junit测试了,因为该记录已经删除,将会报错。
    • 如果不使用事务回滚,我们需要在代码中显式的对我们的增删改数据库操作进行恢复,将多很多和测试无关的代码

2、核心方法

(1) perform

MocMvc.perform(get/post(接口).header("token",token).contentType(MediaType.APPLICATION_JSON).params("pcode","root"))
  • perform(RequestBuilder requestBuilder ):执行一个RequestBuilder请,会自动执行SpringMVC的流程并映射到相应的控制器执行处理,该方法的返回值是一个ResultActions。
    • get:声明发送一个get请求的方法。MockHttpServletRequestBuilder get(String urlTemplate, Object… urlVariables):根据uri模板和uri变量值得到一个GET请求方式的。另外提供了其他的请求的方法,如:post、put、delete等。
    • header:带上头文件token
    • contentType:数据类型。
    • params:添加request的参数,如上面发送请求的时候带上了了pcode = root的参数。假如使用需要发送json数据格式的时将不能使用这种方式。

(2) ResultActions

  • andExpect:添加ResultMatcher验证规则,验证控制器执行完成后结果是否正确(对返回的数据进行的判断)。
  • andDo:添加ResultHandler结果处理器,比如调试时打印结果到控制台(对返回的数据进行的判断)。
  • andReturn:最后返回相应的MvcResult;然后进行自定义验证/进行下一步的异步处理(对返回的数据进行的判断);

(3)初始化MockMvc对象

	@Before
    public void setUp() {
    	//此种方式可通过spring上下文来自动配置一个或多个controller
        mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值