17.测试
Spring Boot提供了许多实用程序和注释来帮助您测试应用程序。测试支持由两个模块提供:包含spring-boot-test核心项,和支持测试的spring-boot-test-autoconfigure自动配置。
大多数开发人员使用spring-boot-starter-test“Starter”,它导入Spring Boot测试模块以及JUnit,AssertJ,Hamcrest和许多其他有用的库。
17.1测试范围依赖性
在spring-boot-starter-test“入门”(中test scope)包含以下提供的库:
JUnit 4:单元测试Java应用程序的事实标准。
Spring Test和Spring Boot测试:Spring Boot应用程序的实用程序和集成测试支持。
AssertJ:一个流畅的断言库。
Hamcrest:匹配器对象库(也称为约束或谓词)。
Mockito:一个Java 模拟框架。
JSONassert:JSON的断言库。
JsonPath:JSON的XPath。
17.2测试Spring Boot应用程序
Spring Boot应用程序是一个Spring ApplicationContext,所以没有什么特别的东西可以用来测试它超出你通常使用的Spring语境。
Spring Boot提供了一个@SpringBootTest注释,spring-test @ContextConfiguration当您需要Spring Boot功能时,它可以用作标准注释的替代方法。注释的工作原理是通过 创建 ApplicationContext测试中使用的SpringApplication。除了 @SpringBootTest提供许多其他注释之外,还提供了用于 测试应用程序的更具体的切片。
默认情况下,@SpringBootTest不会启动服务器。您可以使用该webEnvironment 属性@SpringBootTest进一步优化测试的运行方式:
MOCK(默认):加载Web ApplicationContext并提供模拟Web环境。使用此批注时,不会启动嵌入式服务器。如果类路径上没有Web环境,则此模式将透明地回退到创建常规非Web ApplicationContext。它可以与Web应用程序一起使用 @AutoConfigureMockMvc或@AutoConfigureWebTestClient用于基于模拟的Web应用程序测试。
RANDOM_PORT:加载a WebServerApplicationContext并提供真实的Web环境。嵌入式服务器启动并在随机端口上侦听。
DEFINED_PORT:加载a WebServerApplicationContext并提供真实的Web环境。嵌入式服务器启动并侦听定义的端口(来自您的 application.properties)或默认端口8080。
NONE:ApplicationContext通过使用SpringApplication但不提供 任何 Web环境(模拟或其他)来加载。
17.2.1 Demo应用测试
Demo应用测试,代码如下所示:
package com.example.demo;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
/**
* Demo应用测试
*
* @author 大强
*
*/
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class DemoApplicationTests {
@Test
public void contextLoads() {
}
@Autowired
private MockMvc mvc;
@Test
public void exampleTest() throws Exception {
this.mvc.perform(get("/")).andExpect(status().isOk()).andExpect(content().string("Hello LiSi"));
}
}
17.2.2 城市测试
城市测试,代码如下所示:
package com.example.demo;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import com.example.demo.city.City;
import com.example.demo.city.CityRepository;
import com.example.demo.city.CityService;
import java.util.List;
/**
* 城市测试
*
* @author 大强
*/
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class CityTests {
@Autowired
private CityRepository cityRepository;
@Autowired
CityService cityService;
/**
* 新增城市
*/
@Test
public void addCity() {
City city = new City();
city.setName("西安");
city.setState("有效");
city = cityRepository.save(city);
Assert.assertNotNull(city.getId());
}
/**
* 根据名称查询单个城市测试
*/
@Test
public void getCity() {
City city = new City();
List
if (list.size() > 0) {
city = list.get(0);
}
Assert.assertEquals("西安", city.getName());
}
/**
* 查询所有城市列表测试
*/
@Test
public void getAllCitys() {
Iterable
Assert.assertTrue(iterable.iterator().hasNext());
}
/**
* 修改城市测试
*/
@Test
public void updateCity() {
City city = new City();
List
if (list.size() > 0) {
city = list.get(0);
}
city.setState("无效");
city = cityRepository.save(city);
Assert.assertEquals("无效", city.getState());
}
/**
* 删除城市测试
*/
@Test
public void deleteCity() {
City city = new City();
List
if (list.size() > 0) {
city = list.get(0);
}
cityRepository.delete(city);
list = cityRepository.findByName("西安");
if (list.size() > 0) {
city = list.get(0);
}
Assert.assertEquals(0, list.size());
}
}
如有疑问,请观看视频:https://ke.qq.com/course/428845