环境:JDK1.8、MAVEN 3.6.1、eclipse
1.导入测试依赖
当前的
pom
文件
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.4.RELEASE</version>
<relativePath />
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 导入测试模块 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
2.创建入口类
当前的
Application
类中的内容:
/**
* @description 使用SpringBoot中的测试
* @author hy
* @date 2019-08-16
*/
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
3.创建简单的Controller层
当前的
TestController
类的内容:
/**
* @description 创建简单的测试controller层
* @author hy
* @date 2019-08-16
*/
@RestController
public class TestController {
@RequestMapping("/testApp")
public String testApp() {
return "【测试成功】!";
}
}
4.创建测试类
当前的
ApplicationTest
类中的内容:
/**
* @description 创建测试类用于测试当前的
* @author admin
* @date 2019-08-16
*/
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)//加载启动类
@WebAppConfiguration//申明当前是web项目,可以注入WebApplicationContext
public class ApplicationTest {
MockMvc mvc;
@Autowired
WebApplicationContext webApplicationContext;
//测试之前
@Before
public void startUp() {
// 通过MockMvcBuilders和当前web应用创建MockMvc
mvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
}
@Test
public void testTestController() throws Exception {
String uri = "/testApp";
MvcResult result = mvc.perform(MockMvcRequestBuilders.get(uri).accept(MediaType.APPLICATION_JSON)).andReturn();
// 获取响应状态码
int status = result.getResponse().getStatus();
// 获取返回的响应体
String content = result.getResponse().getContentAsString();
Assert.assertEquals("错误,正确的返回值为:2000", 200, status);
System.out.println("响应状态码:" + status);
System.out.println("返回值:" + content);
}
}
5.SpringBoot 1.2.4.RELEASE的测试
启动当前的testTestController方法结果成功!
6.SpringBoot 2.1.18.RELEASE的测试
主要区别在于测试类的内容
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = SpringBootDataRestDocApp.class)
@WebAppConfiguration
public class AppTest {
MockMvc mvc;
@Autowired
WebApplicationContext webApplicationContext;
// 测试之前
@Before
public void startUp() {
// 通过MockMvcBuilders和当前web应用创建MockMvc
mvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
}
@Test
public void shouldReturnDefaultMessage() throws Exception {
this.mvc
.perform(MockMvcRequestBuilders.get("/testApp").accept(MediaType.APPLICATION_JSON))
.andExpect(MockMvcResultMatchers.status().isOk()).andDo(MockMvcResultHandlers.print());
}
}
这里@SpringBootTest(classes=SpringBootDataRestDocApp.class)
和@WebAppConfiguration
与上面不一致,其他的基本一致
7.总结
1.使用SpringBoot中测试web项目的时候,需要导入依赖
2.在1.2.4.RELEASE测试类中上面需要添加:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = 入口类)
@WebAppConfiguration
3.在2.1.18.RELEASE测试类中上面需要添加:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = 入口类)
@WebAppConfiguration
3.在当前内中注入WebApplicationContext对象,并通过mvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
获取MockMvc对象
4.通过当前的MockMvc对象可以访问当前@RequestMapping中的路径,通过mvc.perform(MockMvcRequestBuilders.get(uri).accept(MediaType.APPLICATION_JSON)).andReturn();
//返回MvcResult
5.最后通过MvcResult
获取响应体,和响应码!
以上纯属个人见解,如有问题请联系本人!