Eclipse搭建springboot項目(五)單元測試


知識點:Springboot2.0單元測試和自定義異常處理

  1、@SpringBootTest單元測試
    1)、引入相關依賴

<!--springboot程序測試依賴,如果是自動創建項目默認添加-->
<dependency>
    <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

    2)、使用    

@RunWith(SpringRunner.class) //底層用junit SpringJUnit4ClassRunner
@SpringBootTest(classes={XdclassApplication.class})//啟動整個springboot工程
public class SpringBootTests { }

    3)單元測試注解

      a )@Test

      b)@Before 在Test前執行

      c)@After 在Test后執行

  2、SpringBoot測試進階之MockMvc類的使用和模擬Http請求

    1)、增加類注解 @AutoConfigureMockMvc
    @SpringBootTest(classes={XdclassApplication.class})

    MockMvc相當於Http客戶端
    2)、相關API
    perform:執行一個RequestBuilder請求
    andExpect:添加ResultMatcher->MockMvcResultMatchers驗證規則
    andReturn:最后返回相應的MvcResult->Response

  3、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

  4、SpringBoot2.x配置全局異常
    講解:服務端異常講解和SpringBoot配置全局異常實戰

      1)、默認異常測試 int i = 1/0,不友好
      2)、異常注解介紹
        @ControllerAdvice 如果是返回json數據 則用 RestControllerAdvice,就可以不加 @ResponseBody
        //捕獲全局異常,處理所有不可知的異常
        @ExceptionHandler(value=Exception.class)

  5、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);
    }
    

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM