spring boot 之Controller简单单元测试(RESTful API)

#spring boot 之Controller简单单元测试(RESTful API)

MocMvc做为服务端测试类,功能十分强大;在spring全家桶中,在springMVC和springboot中都可以使用,用法十分相似。

  • 首先需要在pom.xml中加入依赖配置。
1
2
3
4
5
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

###第一种使用注解方法注入MocMvc
//@RunWith(SpringJUnit4ClassRunner.class) SpringRunner extends SpringJUnit4ClassRunner
@RunWith(SpringRunner.class)
@WebAppConfiguration //支持web项目注解
@SpringBootTest////(classes = DemoApplication.class, webEnvironment = SpringBootTest.WebEnvironment.MOCK)指定SpringBoot工程的Application启动类
@AutoConfigureMockMvc
public class TestController {
@Autowired
private MockMvc mockMvc;
@Autowired
private UserService userService;

@Test
public void testUser() throws Exception {
    //提交请求 构建RequestBuilder对象,模拟request请求
    RequestBuilder request = null;
    request = MockMvcRequestBuilders.get("/");
    mockMvc.perform(request).andExpect(status().isOk()).andReturn();
    mockMvc.perform((post("/hello"))).andExpect(status().isOk())
            .andDo(print()).andReturn();
}

###第二种手动注入MocMvc(分为集成web环境和独立测试方式)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
@RunWith(SpringRunner.class)
@WebAppConfiguration //支持web项目注解
@SpringBootTest////(classes = DemoApplication.class, webEnvironment = SpringBootTest.WebEnvironment.MOCK)指定SpringBoot工程的Application启动类
public class TestController {
private MockMvc mockMvc;
@Autowired
private WebApplicationContext wac;
//集成Web环境方式 ()
@Before
public void setUp() {
this.mockMvc = webAppContextSetup(this.wac).build();
}
//独立测试
//@Before
//public void setUp() {
// IndexController indexController =new IndexController();
// this.mockMvc = MockMvcBuilders.standaloneSetup(indexController).build();
//}
@Test
public void testUser() throws Exception {
//提交请求 构建RequestBuilder对象,模拟request请求
RequestBuilder request = null;
request = MockMvcRequestBuilders.get("/");
mockMvc.perform(request).andExpect(status().isOk()).andReturn();
mockMvc.perform((post("/hello"))).andExpect(status().isOk())
.andDo(print()).andReturn();
}

1、@WebAppConfiguration:测试环境使用,用来表示测试环境使用的ApplicationContext将是WebApplicationContext类型的;value指定web应用的根;
2、通过@Autowired WebApplicationContext wac:注入web环境的ApplicationContext容器;
3、然后通过MockMvcBuilders.webAppContextSetup(wac).build()创建一个MockMvc进行测试;

  • 几个常用的方法:

perform:执行一个RequestBuilder请求,会自动执行SpringMVC的流程并映射到相应的控制器执行处理;
andExpect:添加ResultMatcher验证规则,验证控制器执行完成后结果是否正确;
andDo:添加ResultHandler结果处理器,比如调试时打印结果到控制台;
andReturn:最后返回相应的MvcResult;然后进行自定义验证/进行下一步的异步处理;

  • 参考

spring boot 基于Controller自动化测试demo
Junit学习笔记之五:MockMVC