4、Spring Boot 使用MockMvc测试Controller

基础环境:按照之前的《3、一个简单的Spring Boot web程序》文章搭建环境

 

1、在src/test/java/的com.example.demo包里新建一个测试类:

 

代码:

package com.example.demo;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;

import com.example.demo.controller.HelloWorldController;

import static org.hamcrest.Matchers.equalTo;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;

@RunWith(SpringRunner.class)
@SpringBootTest
public class HelloTests
{
    private MockMvc mockMvc;

    @Before // 这个方法在每个方法执行之前都会执行一遍
    public void setUp() throws Exception 
    {
            // 初始化MockMvc对象
            mockMvc = MockMvcBuilders.standaloneSetup(new HelloWorldController()).build();
    }

    @Test
    public void getHello() throws Exception 
    {
            mockMvc.perform(MockMvcRequestBuilders.get("/hello").accept(MediaType.APPLICATION_JSON))
                .andExpect(status().isOk()) // 返回的状态是200
                .andExpect(content().string(equalTo("Hello World!"))) // 返回的Body内容是"Hello World"
                .andDo(print())         //打印出请求和相应的内容
                .andReturn().getResponse().getContentAsString();   //将相应的数据转换为字符串
                        
    }
}

 

代码解释:

  • @RunWith就是一个运行器,@RunWith(SpringRunner.class)就是指用SpringRunner来运行。以便在测试开始的时候自动创建Spring的应用上下文。如果不用@RunWith(SpringRunner.class),想创建spring容器的话,就得在web.xml配置classloder。 注解了@RunWith(SpringRunner.class)就可以直接使用spring容器,直接使用@Test注解,不用启动spring容器。

  • mockMvc.perform执行一个请求;
  • MockMvcRequestBuilders.get("/hello")构造一个GET请求
  • .accept(MediaType.APPLICATION_JSON))指定接收返回的数据类型
  • .andExpect()添加执行完成后的断言
  • .andDo添加一个结果处理器,表示要对结果做点什么事情,比如此处使用MockMvcResultHandlers.print()输出整个响应结果信息。
  • andReturn表示执行完成后返回相应的结果

 

2、找到DemoApplication.java类的main方法,右键选择Run As——Java Application

等待出现Started DemoApplication in XXX seconds

 

3、在上面写好的测试类HelloTests中,右键选择Run As——JUnit Test

 

4、查看控制台显示的结果

 

5、可以看到返回的数据类型为:Content type = application/json

内容为Body = Hello World!

 

注意:调试完之后控制台会变成两个,点击向下的倒三角可以展开切换。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值