【Junit】Junit 与 SpringMVC 整合测试

  本章介绍使用 Junit4 测试 SpringBoot,关于 Junit4 的基本使用 参考:【Junit】Junit快速入门

  关于SpringMVC项目搭建参考,参考:【Maven】Eclipse 使用Maven创建SpringMVC Web项目

一、项目框架

1、新建一个SpringMVC项目

2、引入Junit4依赖,项目完整依赖如下:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5     <modelVersion>4.0.0</modelVersion>
 6 
 7     <groupId>org.example</groupId>
 8     <artifactId>test-junit-springmvc</artifactId>
 9     <version>1.0-SNAPSHOT</version>
10 
11     <properties>
12         <!-- spring -->
13         <spring.version>5.2.4.RELEASE</spring.version>
14         <!-- Servlet -->
15         <servlet.version>3.0.1</servlet.version>
16         <jsp-api.version>2.2</jsp-api.version>
17         <!-- jstl -->
18         <jstl.version>1.2</jstl.version>
19         <standard.version>1.1.2</standard.version>
20 
21         <maven.compiler.source>8</maven.compiler.source>
22         <maven.compiler.target>8</maven.compiler.target>
23     </properties>
24 
25     <dependencies>
26         <!-- Spring -->
27         <dependency>
28             <groupId>org.springframework</groupId>
29             <artifactId>spring-webmvc</artifactId>
30             <version>${spring.version}</version>
31         </dependency>
32 
33         <!-- Spring Test 模块 -->
34         <dependency>
35             <groupId>org.springframework</groupId>
36             <artifactId>spring-test</artifactId>
37             <version>${spring.version}</version>
38             <scope>test</scope>
39         </dependency>
40 
41 
42         <!-- Servlet -->
43         <dependency>
44             <groupId>javax.servlet</groupId>
45             <artifactId>javax.servlet-api</artifactId>
46             <version>${servlet.version}</version>
47             <scope>provided</scope>
48         </dependency>
49         <dependency>
50             <groupId>javax.servlet.jsp</groupId>
51             <artifactId>jsp-api</artifactId>
52             <version>${jsp-api.version}</version>
53             <scope>provided</scope>
54         </dependency>
55 
56         <!-- jstl -->
57         <dependency>
58             <groupId>javax.servlet</groupId>
59             <artifactId>jstl</artifactId>
60             <version>${jstl.version}</version>
61         </dependency>
62         <dependency>
63             <groupId>taglibs</groupId>
64             <artifactId>standard</artifactId>
65             <version>${standard.version}</version>
66         </dependency>
67 
68         <!-- JSON -->
69         <dependency>
70             <groupId>com.fasterxml.jackson.core</groupId>
71             <artifactId>jackson-databind</artifactId>
72             <version>2.9.3</version>
73         </dependency>
74 
75         <dependency>
76             <groupId>junit</groupId>
77             <artifactId>junit</artifactId>
78             <version>RELEASE</version>
79             <scope>test</scope>
80         </dependency>
81     </dependencies>
82 
83 </project>  

3、项目controller如下:

 1 package com.test.junit.mvc.controller;
 2 
 3 import org.springframework.stereotype.Controller;
 4 import org.springframework.web.bind.annotation.RequestMapping;
 5 import org.springframework.web.bind.annotation.ResponseBody;
 6 import org.springframework.web.servlet.ModelAndView;
 7 
 8 import javax.servlet.http.HttpServletRequest;
 9 import java.util.HashMap;
10 import java.util.Map;
11 
12 @Controller
13 public class HelloController {
14 
15     @RequestMapping("/hello")
16     @ResponseBody
17     public String hello(){
18         return "Hello World";
19     }
20 
21     @RequestMapping("/map")
22     @ResponseBody
23     public Map map(){
24         Map<String, String> map = new HashMap<>();
25         map.put("name", "xiaoming");
26         map.put("age", "18");
27         return map;
28     }
29 
30     @RequestMapping(value="/getView")
31     public ModelAndView getView(HttpServletRequest request){
32         System.out.println("getView");
33         ModelAndView modelAndView = new ModelAndView("test-jsp");
34         return modelAndView;
35     }
36 
37 }
View Code

4、编辑测试类

 1 package com.test.junit.mvc;
 2 
 3 
 4 import org.junit.Before;
 5 import org.junit.Test;
 6 import org.junit.runner.RunWith;
 7 import org.springframework.beans.factory.annotation.Autowired;
 8 import org.springframework.http.MediaType;
 9 import org.springframework.test.context.ContextConfiguration;
10 import org.springframework.test.context.junit4.SpringRunner;
11 import org.springframework.test.context.web.WebAppConfiguration;
12 import org.springframework.test.web.servlet.MockMvc;
13 import org.springframework.test.web.servlet.MvcResult;
14 import org.springframework.test.web.servlet.ResultActions;
15 import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
16 import org.springframework.test.web.servlet.result.MockMvcResultHandlers;
17 import org.springframework.test.web.servlet.setup.MockMvcBuilders;
18 import org.springframework.web.context.WebApplicationContext;
19 import org.springframework.web.servlet.ModelAndView;
20 
21 
22 // SpringRunner 继承了SpringJUnit4ClassRunner,
23 // 没有扩展任何功能;使用SpringRunner,名字简短而已
24 @RunWith(SpringRunner.class)
25 // @RunWith(SpringJUnit4ClassRunner.class)
26 // Web项目配置
27 @WebAppConfiguration
28 // 上下文配置
29 @ContextConfiguration(locations = {"classpath:spring/spring-mvc.xml", "classpath:spring/spring-context.xml"})
30 public class TestMVC {
31 
32     @Autowired
33     private WebApplicationContext webApplicationContext;
34 
35     private MockMvc mockMvc;
36 
37     @Before
38     public void setup() {
39         // 构建mockMvc 对象
40         this.mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
41     }
42 
43 
44     @Test
45     public void getView() throws Exception {
46         ResultActions resultActions = this.mockMvc.perform(
47                 // 数据的格式请求的url,请求的方法是get
48                 MockMvcRequestBuilders.get("/getView")
49         );
50         // 打印调试结果到控制台
51         resultActions.andDo(MockMvcResultHandlers.print());
52         // 获取返回结果
53         MvcResult mvcResult = resultActions.andReturn();
54         // 获取视图
55         ModelAndView modelAndView = mvcResult.getModelAndView();
56         System.out.println(modelAndView);
57     }
58 
59     @Test
60     public void map() throws Exception {
61         ResultActions resultActions = this.mockMvc.perform(
62                 // 数据的格式请求的url,请求的方法是get
63                 MockMvcRequestBuilders.get("/map")
64                         .contentType(MediaType.APPLICATION_JSON)
65         );
66         resultActions.andDo(MockMvcResultHandlers.print());
67         MvcResult mvcResult = resultActions.andReturn();
68         System.out.println(mvcResult.getResponse().getContentAsString());
69     }
70 
71     @Test
72     public void hello() throws Exception {
73         ResultActions resultActions = this.mockMvc.perform(
74                 // 数据的格式请求的url,请求的方法是get
75                 MockMvcRequestBuilders.get("/hello"));
76         // 打印调试结果到控制台
77         resultActions.andDo(MockMvcResultHandlers.print());
78         // 获取返回结果
79         MvcResult mvcResult = resultActions.andReturn();
80         System.out.println(mvcResult.getResponse().getContentAsString());
81     }
82 }

  关于 MockMvc 的使用

  参考:https://www.cnblogs.com/zengls/p/11316454.html

  参考:https://zhuanlan.zhihu.com/p/98074553

原文地址:https://www.cnblogs.com/h--d/p/14707260.html