知識點:Springboot2.0單元測試和自定義異常處理html
一、@SpringBootTest單元測試
1)、引入相關依賴java
<!--springboot程序測試依賴,若是是自動建立項目默認添加--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency>
2)、使用 web
@RunWith(SpringRunner.class) //底層用junit SpringJUnit4ClassRunner @SpringBootTest(classes={XdclassApplication.class})//啓動整個springboot工程 public class SpringBootTests { }
3)單元測試註解spring
a )@Testjson
b)@Before 在Test前執行api
c)@After 在Test後執行springboot
二、SpringBoot測試進階之MockMvc類的使用和模擬Http請求mvc
1)、增長類註解 @AutoConfigureMockMvc
@SpringBootTest(classes={XdclassApplication.class})app
MockMvc至關於Http客戶端
2)、相關API
perform:執行一個RequestBuilder請求
andExpect:添加ResultMatcher->MockMvcResultMatchers驗證規則
andReturn:最後返回相應的MvcResult->Responsedom
三、SpringBoot2.x個性化啓動banner設置和debug日誌
簡介:自定義應用啓動的趣味性日誌圖標和查看調試日誌
1)、啓動獲取更多信息 java -jar xxx.jar --debug
2)、修改啓動的banner信息
a)在類路徑下增長一個banner.txt,裏面是啓動要輸出的信息
b)在applicatoin.properties增長banner文件的路徑地址spring.banner.location=banner.txt
c)官網地址 https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#boot-features-banners
四、SpringBoot2.x配置全局異常
講解:服務端異常講解和SpringBoot配置全局異常實戰
1)、默認異常測試 int i = 1/0,不友好
2)、異常註解介紹
@ControllerAdvice 若是是返回json數據 則用 RestControllerAdvice,就能夠不加 @ResponseBody
//捕獲全局異常,處理全部不可知的異常
@ExceptionHandler(value=Exception.class)
五、SpringBoot2.x配置全局異常返回自定義頁面
簡介:使用SpringBoot自定義異常和錯誤頁面跳轉實戰
1)、返回自定義異常界面,須要引入thymeleaf依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
2)、resource目錄下新建templates,並新建error.html
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("error.html");
modelAndView.addObject("msg", e.getMessage());
return modelAndView;
https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#boot-features-error-handling
1.新建測試類,引入依賴和註解,採用斷言測試:
package net.aaron.demo.aaron_springboot; import org.junit.jupiter.api.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import junit.framework.TestCase; import net.aaron.demo.AaronSpringbootApplication; @RunWith(SpringRunner.class) // 底層用junit SpringJUnit4ClassRunner @SpringBootTest(classes = { AaronSpringbootApplication.class }) // 指定工程main函數入口,啓動整個springboot工程 class AaronSpringbootApplicationTests { @Test public void testOne() { System.out.println("Hello World"); //斷言 //TestCase.assertEquals(expected, actual); TestCase.assertEquals(1, 1); } }
2.MocMVC測試:
1)建立被測試Controller
package net.aaron.demo.controller; import java.util.Date; import java.util.HashMap; import java.util.Map; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import net.aaron.demo.domain.User; @RestController public class SampleController { @RequestMapping("/test/home") public String home() { return "aaron"; } @RequestMapping("/test") public Map<String,String> testMap(){ Map<String,String> map = new HashMap<>(); map.put("name", "aaron"); return map; } @GetMapping("/testjson") public Object testjson(){ return new User(111, "abc123", "10001000", new Date()); } }
2)建立MockMvc測試類,返回200即OK
package net.aaron.demo.aaron_springboot; import org.junit.jupiter.api.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 org.springframework.test.web.servlet.MockMvcBuilder; import org.springframework.test.web.servlet.MvcResult; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import org.springframework.test.web.servlet.result.MockMvcResultMatchers; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import net.aaron.demo.AaronSpringbootApplication; @RunWith(SpringRunner.class) @SpringBootTest(classes = { AaronSpringbootApplication.class }) @AutoConfigureMockMvc public class MockMvcTestDemo { @Autowired private MockMvc mockMvc; @Test public void apiTest() throws Exception { //perform 模擬一個request請求 //andExpect 指望值 //MockMvcResultMatchers 結果匹配系 //andReturn 返回request請求結果 MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.get("/test/home/")).andExpect(MockMvcResultMatchers.status().isOk()).andReturn(); //獲取狀態碼 int status = mvcResult.getResponse().getStatus(); System.out.println(status); } }