SpringBoot学习笔记——mock
可以使用mock对springboot web接口进行测试
1.依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
2.编写测试用例
import org.apache.tomcat.util.codec.binary.Base64;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.HttpHeaders;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultHandlers;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import javax.annotation.Resource;
import java.nio.charset.StandardCharsets;
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class HelloControllerTest {
@Resource
private MockMvc mockMvc;
@Test
public void helloTest() throws Exception {
String expect = "{\"code\":200,\"msg\":\"hello: 1\",\"data\": null}";
String auth = "admin:admin";
byte[] originAuth = auth.getBytes(StandardCharsets.US_ASCII);
byte[] encodedAuth = Base64.encodeBase64(originAuth);
String authHeader = "Basic " + new String(encodedAuth);
HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", authHeader);
mockMvc.perform(MockMvcRequestBuilders.get("/hello/1")
.headers(headers))
.andExpect(MockMvcResultMatchers.content().json(expect))
.andDo(MockMvcResultHandlers.print());
}
}
测试GET请求
MockHttpServletRequest:
HTTP Method = GET
Request URI = /hello/1
Parameters = {}
Headers = [Authorization:"Basic YWRtaW46YWRtaW4="]
Body = null
Session Attrs = {SPRING_SECURITY_CONTEXT=SecurityContextImpl [Authentication=UsernamePasswordAuthenticationToken [Principal=org.springframework.security.core.userdetails.User [Username=admin, Password=[PROTECTED], Enabled=true, AccountNonExpired=true, credentialsNonExpired=true, AccountNonLocked=true, Granted Authorities=[]], Credentials=[PROTECTED], Authenticated=true, Details=WebAuthenticationDetails [RemoteIpAddress=127.0.0.1, SessionId=1], Granted Authorities=[ROLE_USER]]]}
Handler:
Type = com.example.demo.controller.HelloController
Method = com.example.demo.controller.HelloController#hello(Integer)
Async:
Async started = false
Async result = null
Resolved Exception:
Type = null
ModelAndView:
View name = null
View = null
Model = null
FlashMap:
Attributes = null
MockHttpServletResponse:
Status = 200
Error message = null
Headers = [Content-Type:"application/json", X-Content-Type-Options:"nosniff", X-XSS-Protection:"1; mode=block", Cache-Control:"no-cache, no-store, max-age=0, must-revalidate", Pragma:"no-cache", Expires:"0", X-Frame-Options:"DENY"]
Content type = application/json
Body = {"code":200,"msg":"hello: 1","data":null}
Forwarded URL = null
Redirected URL = null
Cookies = []
Process finished with exit code 0
测试POST请求
@Test
@Transactional
public void createUserTest() throws Exception {
String expect = "{\"code\":200,\"msg\":\"success\",\"data\": null}";
String auth = "admin:admin";
byte[] originAuth = auth.getBytes(StandardCharsets.US_ASCII);
byte[] encodedAuth = Base64.encodeBase64(originAuth);
String authHeader = "Basic " + new String(encodedAuth);
HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", authHeader);
mockMvc.perform(
MockMvcRequestBuilders.post("/user")
.headers(headers)
.contentType(MediaType.APPLICATION_JSON)
.content("{\n" +
" \"username\": \"admin\",\n" +
" \"password\": \"admin\"\n" +
"}"))
.andExpect(MockMvcResultMatchers.content().json(expect))
.andDo(MockMvcResultHandlers.print());
}
在对POST请求的测试中,添加了 @Transactional 注解,用于在对测试中插入的数据进行回滚,避免插入脏数据
使用 @SpringBootTest注解 如何配置测试环境请参考:Spring Boot 2 实战:mock测试你的web应用
本文只发表于博客园和tonglin0325的博客,作者:tonglin0325,转载请注明原文链接:https://www.cnblogs.com/tonglin0325/p/5316036.html

浙公网安备 33010602011771号