SpringBoot中的测试(test)
SpringBoot2.2之后⽤的Junit5,所以在这⾥使⽤的Junit5。Spring Boot会默认帮我们导⼊包,所以不⽤添加依赖了。
注解:
@BeforeAll : 只执⾏⼀次,执⾏时机是在所有测试和 @BeforeEach 注解⽅法之前。
@BeforeEach:在每个测试执⾏之前执⾏。
@AfterEach :在每个测试执⾏之后执⾏。
@AfterAll: 只执⾏⼀次,执⾏时机是在所有测试和 @AfterEach 注解⽅法之后。
测试⼀下,代码如下
ample.demo;
import org.junit.jupiter.api.*;
import org.st.context.SpringBootTest;
import st.web.servlet.MockMvc;
@SpringBootTest
class DemoApplicationTests {
private MockMvc mockMvc;
@BeforeAll
public static void  beforeAll(){
System.out.println("begin All");
}
@BeforeEach
public void beforeEach(){
System.out.println("begin Each");
}
@Test
public void test1(){
System.out.println("test1");
}
@Test
public void test2(){
System.out.println("test2");
}
@AfterEach
public void afterEach(){
System.out.println("end Each");
}
@AfterAll
public static void afterAll(){
System.out.println("end All");
}
}
最终的输出结果为:
begin All
begin Each
test1
end Each
begin Each
test2
end Each
end All
assert(断⾔)。⼀般的断⾔,⽆⾮是检查⼀个实例的属性(⽐如,判空与判⾮空等),或者对两个实例进⾏⽐较(⽐如,检查两个实例对象是否相等)等
assertEquals(A,B,"message"),判断A对象和B对象是否相等,这个判断在⽐较两个对象时调⽤了equals()⽅法。
assertSame(A,B,"message"),判断A对象与B对象是否相同,使⽤的是==操作符。
assertTrue(A,"message"),判断A条件是否为真。
assertFalse(A,"message"),判断A条件是否不为真。
assertNotNull(A,"message"),判断A对象是否不为null。
assertArrayEquals(A,B,"message"),判断A数组与B数组是否相等
MockMvc。对Controller的测试需要⽤到MockMvc技术
⾸先初始化MockMvc
private MockMvc mockMvc;
@Autowired
private WebApplicationContext wac;
@Before
public void setupMockMvc(){
mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
}
然后使⽤mockMvc模拟请求
模拟get请求带参数
mockMvc.("/hello?name={name}","zeng"));
模拟post请求
mockMvc.perform(MockMvcRequestBuilders.post("/user").param("name", "zhang")) //执⾏传递参数的POST请求(也可以post("/user?name=zhang"))  模拟⽂件上传
mockMvc.perform(MockMvcRequestBuilders.fileUpload("/fileupload").file("file", "⽂件内容".getBytes("utf-8")));
也可以直接使⽤MultiValueMap构建参数
MultiValueMap<String, String> params = new LinkedMultiValueMap<String, String>();
params.add("name", "zeng");
params.add("password", "123");
params.add("id", "1");
mockMvc.("/stu").params(params));
模拟session和cookie
mockMvc.("/index").sessionAttr(name, value));
mockMvc.("/index").cookie(new Cookie(name, value)));
模拟HTTP请求头:
mockMvc.("/user/{id}", 1).header(name, values));
设置请求的Content-Type:
mockMvc.("/index").contentType(MediaType.APPLICATION_JSON_UTF8));
设置返回格式为JSON:
mockMvc.("/user/{id}", 1).accept(MediaType.APPLICATION_JSON));
mockMvc处理返回结果
期望成功调⽤,即HTTP Status为200:
spring framework面试题mockMvc.("/user/{id}", 1))
.andExpect(MockMvcResultMatchers.status().isOk());
期望返回内容是application/json:
mockMvc.("/user/{id}", 1))
.t().contentType(MediaType.APPLICATION_JSON));
检查返回JSON数据中某个值的内容:
mockMvc.("/user/{id}", 1))
.andExpect(MockMvcResultMatchers.jsonPath("$.name").value("zzz"))
这⾥使⽤到了jsonPath,$代表了JSON的根节点.
⽐较返回内容,使⽤content():
// 返回内容为hello
mockMvc.("/index"))
.t().string("hello"));
// 返回内容是XML,并且与xmlCotent⼀样
mockMvc.("/index"))
.t().xml(xmlContent));
// 返回内容是JSON ,并且与jsonContent⼀样
mockMvc.("/index"))
.t().json(jsonContent));
⽐较forward或者redirect:
mockMvc.("/index"))
.andExpect(MockMvcResultMatchers.forwardedUrl("index.html"));
// 或者
mockMvc.("/index"))
.directedUrl("index.html"));
输出响应结果:
mockMvc.("/index"))
.andDo(MockMvcResultHandlers.print());
在测试过程中如果要对数据库添加、删除、修改数据可以使⽤@Transactional,使数据能够回滚。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。