zoukankan      html  css  js  c++  java
  • 【转】 springBoot(5)---单元测试,全局异常

    【转】 springBoot(5)---单元测试,全局异常

    单元测试,全局异常

    一、单元测试

    1.基础版

    1、引入相关依赖

    <!--springboot程序测试依赖,如果是自动创建项目默认添加-->
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
    </dependency>

    2:关键注解:@RunWith @SpringBootTest

    import junit.framework.TestCase;
    
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.junit4.SpringRunner;
    
    
    @RunWith(SpringRunner.class)  //底层用junit  SpringJUnit4ClassRunner
    @SpringBootTest(classes={SpringbootstudyApplication.class})//启动整个springboot工程
    public class SpringBootTestDemo {    
        
        @Test
        public void testOne(){
            System.out.println("test hello 1");
            TestCase.assertEquals(1, 1);
            
        }    
        @Test
        public void testTwo(){
            System.out.println("test hello 2");
            TestCase.assertEquals(1, 1);
            
        }        
        
        @Before
        public void testBefore(){
            System.out.println("before");
        }    
        
        @After
        public void testAfter(){
            System.out.println("after");
        }    
    }

    输出结果:

    2.MockMvc

         MockMvc类的使用和模拟Http请求实战 

    TestController

    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class TestController {
    
        
        @RequestMapping("/vq/test")
        public  String  getTest(){
            
            return"我是测试返回值";
        }
    }

    MockMvcTestDemo

    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 org.springframework.test.web.servlet.MvcResult;
    import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
    import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
    
    /**
     * 功能描述:测试mockmvc类
     *
     */
    @RunWith(SpringRunner.class)  //底层用junit  SpringJUnit4ClassRunner
    @SpringBootTest(classes={SpringbootstudyApplication.class}) //启动整个springboot工程
    @AutoConfigureMockMvc 
    public class MockMvcTestDemo {
    
        
        @Autowired
        private MockMvc mockMvc;
        
        @Test
        public void apiTest() throws Exception {
            
            MvcResult mvcResult =  mockMvc.perform( MockMvcRequestBuilders.get("/vq/test") ).
                    andExpect( MockMvcResultMatchers.status().isOk() ).andReturn();
            int status = mvcResult.getResponse().getStatus();
            System.out.println(status);
            
        }
    }

    结果:返回200状态码

    总结,关键注解:

    @RunWith(SpringRunner.class)  //底层用junit  SpringJUnit4ClassRunner
    @SpringBootTest(classes={SpringbootstudyApplication.class}) //启动整个springboot工程
    @AutoConfigureMockMvc 

    二、配置全局异常 

     首先springboot自带异常是不友好的。

    举例

    @RequestMapping(value = "/api/v1/test_ext")  
        public Object index() {
            int i= 1/0;
            return new User(11, "sfsfds", "1000000", new Date());
        } 

     页面

     

     1、配置全局异常

    import java.util.HashMap;
    import java.util.Map;
    
    import javax.servlet.http.HttpServletRequest;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.web.bind.annotation.ExceptionHandler;
    import org.springframework.web.bind.annotation.RestControllerAdvice;
    
    //添加全局异常注解
    @RestControllerAdvice
    public class CustomExtHandler {
    
        private static final Logger LOG = LoggerFactory.getLogger(CustomExtHandler.class);
      
        //捕获全局异常,处理所有不可知的异常
        @ExceptionHandler(value=Exception.class)
        //@ResponseBody
        Object handleException(Exception e,HttpServletRequest request){
            LOG.error("url {}, msg {}",request.getRequestURL(), e.getMessage()); 
            Map<String, Object> map = new HashMap<>();
                map.put("code", 100);
                map.put("msg", e.getMessage());
                map.put("url", request.getRequestURL());
                return map;
        }    
    }

     在看页面:

     

    关键注解:

    @RestControllerAdvice   //全局注解

      @ExceptionHandler(value=Exception.class)  //捕获不同异常,这里捕获是Exception异常,你也可以指定其它异常

     2.自定义异常

    在 Java 中你可以自定义异常。编写自己的异常类时需要记住下面的几点。

    • 所有异常都必须是 Throwable 的子类。
    • 如果希望写一个检查性异常类,则需要继承 Exception 类。
    • 如果你想写一个运行时异常类,那么需要继承 RuntimeException 类。
    1.自定义MyException异常
    /**
     * 功能描述:自定义异常类
     *
     */
    public class MyException extends RuntimeException {
    
        private static final long serialVersionUID = 1L;
        
        public MyException(String code, String msg) {
            this.code = code;
            this.msg = msg;
        }
    
        private String code;
        private String msg;
        public String getCode() {
            return code;
        }
        public void setCode(String code) {
            this.code = code;
        }
        public String getMsg() {
            return msg;
        }
        public void setMsg(String msg) {
            this.msg = msg;
        }
    
    }

    controller类

         /**
         * 功能描述:模拟自定义异常
         */
        @RequestMapping("/api/v1/myext")
        public Object myexc(){
            //直接抛出异常
            throw new MyException("499", "my ext异常");    
        }

    页面

     

    想太多,做太少,中间的落差就是烦恼。想没有烦恼,要么别想,要么多做。上尉【7】

  • 相关阅读:
    数据结构进阶——线段树
    基本数据结构—Hash哈希
    NOIP2013提高组 day2 2019.7.15
    基本算法——归并排序
    基本数据结构—Trie
    NOIP 2011 提高组 Day2 校模拟 7.11
    Noip2014提高组真题Day1,2 校模拟7.7
    NOIP2015 提高组 day1 7.8校模拟
    NOIP2008 提高组 6.9校模拟
    STL-#include<set>
  • 原文地址:https://www.cnblogs.com/Javastudy-note/p/13817999.html
Copyright © 2011-2022 走看看