Spring Boot 教程

Spring Boot 单元测试

上一节我们学习了使用Spring Boot编写第一个应用程序。当程序编写好后,我们可以选择使用浏览器来测试服务,也可以使用JUnit来测试Spring Boot。

如果你需要使用 JUnit 来测试 Spring Boot 应用,你需要额外做一些配置,如下:

(1)引入Spring Boot JUnit 测试 maven 依赖,如下:

<!-- Spring测试模块 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

(2)编写我们自己的 controller,代码如下:

package com.huangx.springboot;


import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @RequestMapping("/hello")
    public String hello() {
        return "hello spring boot";
    }

}

上面 controller 很简单,就一个 hello() 方法,且该方法返回“hello spring boot”字符串(请求地址为 /hello)。

(3)编写 Java 测试代码来测试 controller,如下:

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.result.MockMvcResultHandlers;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
 
@RunWith(SpringRunner.class)
@SpringBootTest
public class HelloControllerTest {
    private MockMvc mvc;
 
    @Before
    public void setUp() throws Exception {
        mvc = MockMvcBuilders.standaloneSetup(new HelloController()).build();
    }
 
    @Test
    public void hello() throws Exception {
        mvc.perform(MockMvcRequestBuilders.get("/hello")
                .accept(MediaType.APPLICATION_JSON))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andDo(MockMvcResultHandlers.print())
                .andReturn();
    }
}

运行上面代码,就可以自动调用“/hello”接口。上面测试程序中用到了 MockMvc,该类是来自“spring-boot-starter-test”依赖包。实现了对Http请求的模拟,能够直接使用网络的形式,转换到Controller的调用,使得测试速度快、不依赖网络环境。同时提供了一套验证的工具,结果的验证十分方便。其中:

  • MockMvcRequestBuilders.get("/hello").accept(MediaType.APPLICATION_JSON):代码将获取一个请求构建对象 RequestBuilder 

  • mvc.perform(...):方法将根据传递的 RequestBuilder 去调用接口

  • andExpect(MockMvcResultMatchers.status().isOk()):判断调用接口返回的状态码是否为 200

  • andDo(MockMvcResultHandlers.print()):执行一个动作,MockMvcResultHandlers.print() 将 MvcResult 细节打印到“标准”输出流。

  • .andReturn():返回请求执行的结果,以便直接访问结果

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号