spring boot 从零开始入门6:自动化测试之MockMvc for REST

关于自动化测试

没有自动化测试的代码很容易出问题,特别是修改已有的代码,很容易产生BUG。没有自动化测试的项目,只要版本发布更新,总会让人很紧张。通过自动化测试,可以提升代码质量及稳定性。
发现BUG不可怕,可怕的是修复了这个BUG,另一个BUG出来了。因此修改BUG前,请先增加自动化测试用例。

本文是REST服务的测试入门篇。

实战

  • 创建helloworld项目

使用sping boot创建一个新的helloworld的WEB项目。

  • 新建HelloWorldController.java类

代码如下:

//HelloWorldController.java
package com.example.helloworld;

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

@RestController
public class HelloWorldController {
    @RequestMapping("/hello")
    public String sayHello() {
        return "Hello World!";
    }
}
  • 手工测试

启动项目,在浏览器的访问REST服务,然后查看结果是否正确。

  • 编写自动化测试代码

通过自动化测试,可以自动完成上述测试
在创建项目时,会自动创建一个测试类 HelloworldApplicationTests


image.png

代码如下:

//HelloworldApplicationTests.java
package com.example.helloworld;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class HelloworldApplicationTests {
    @Test
    public void contextLoads() {
    }
}

在该类中添加自动化测试代码

import org.junit.Before;
import org.springframework.http.MediaType;
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;
    //使用MockMvc对 Controller 层进行测试(即测试REST服务)
    private MockMvc mvc;

    //初始化执行
    @Before
    public void setUp() throws Exception {
        mvc = MockMvcBuilders.standaloneSetup(new HelloWorldController()).build();
    }

    //验证controller是否正常响应并判断返回结果是否正确
    @Test
    public void testHello() throws Exception {
        mvc.perform(MockMvcRequestBuilders.get("/hello").accept(MediaType.APPLICATION_JSON))
                .andExpect(MockMvcResultMatchers.status().isOk())   //返回状态是否是200(isOK)
                .andDo(MockMvcResultHandlers.print())               //是否打印返回结果
                .andExpect(MockMvcResultMatchers.content().string("Hello World!"))  //返回结果是否正确
                .andReturn();
    }
  • 运行自动化测试

在测试类或测试方法上,右键点Run,即可运行自动化测试,可以看到测试成功。


image.png
  • 模拟BUG

打开HelloWorldController类
return "Hello World!"; 中的感叹号去掉,改为 return "Hello World";

再次运行测试,结果如下:


image.png

我们再来模拟另外一个错误,模拟访问URL错误:打开测试类HelloworldApplicationTests,将get("/hello") 中的url改为 get("/helloworld")
再次运行测试,结果如下:

image.png

你可能感兴趣的:(spring boot 从零开始入门6:自动化测试之MockMvc for REST)