1. 程式人生 > >Springboot+Junit 模擬測試 Get請求

Springboot+Junit 模擬測試 Get請求

controller類裡面


@RestController
public class Controller {

    @Autowired
    private Repository repository;

    /**
     * @Description  查詢 表 在某段時間之內的tag的全部資訊 ,訪問資料庫
     * @Return  list
     * @Param   tag (標籤),  startTime (開始時間),  endTime(結束時間)
     * @Date  2018.09.17 18:20
    **/
    @GetMapping("/find")
    public List<Summary> find(String tag, Timestamp startTime, Timestamp endTime){
            List<Summary> list = repository.find(tag,startTime,endTime);
           return list;
    }

    /**
    * @Description 測試 restful 不訪問資料庫
    * @Date  2018-08-19 18:06:23
    * @Return  list
     * http://127.0.0.1:8090/findTest
    */
    @GetMapping("/findTest")
    public List<String> findTest() {
            List<String> list = new ArrayList<>();
            list.add("aaaa");
            return list;
    }
}

 JunitTest

spring的TestRestTemplate,它實現的是RestOperations介面,裡面有好多方法,即get,post,put,delete。但是唯一的缺陷就是直接使用其裡面的put和delete方法並沒有返回值,這讓我們無法用斷言測試了。

       Get請求對應的是getForObject(String url, Class<T> responseType, Object... uriVariables),它直接接受一個具體的URL,以及返回的型別,接受一個Class型別的泛型,也就是XXX.class。

package com.example.test.Junit;

import org.junit.Assert;
import org.junit.Test;
import org.springframework.web.client.RestTemplate;

import java.util.ArrayList;

/**
 * @ClassName JunitTest
 * @description junit 模擬get請求
 * @Author 
 * @Date 2018/9/27 19:06
 ******註解說明******
 * ①、@SuppressWarnings 簡介:java.lang.SuppressWarnings是J2SE5.0中標準的Annotation之一。可以標註在類、欄位、方法、引數、構造方法,以及區域性變數上。
 *                   作用:告訴編譯器忽略指定的警告,不用在編譯完成後出現警告資訊。
 *     @SuppressWarnings("unchecked") 告訴編譯器忽略 unchecked 警告資訊,如使用List,ArrayList等未進行引數化產生的警告資訊
 * ②、Get請求對應的是getForObject(String url, Class<T> responseType, Object... uriVariables),它直接接受一個具體的URL,以及返回的型別,
 *       接受一個Class型別的泛型,也就是XXX.class。
 * ③、標準輸出流System.out.println和標準錯誤輸出流System.err.println:
 *      System.out.println   能重定向到別的輸出流,比如輸出到txt文字中, 一般性的輸出用out;
 *      System.err.println   只能在螢幕上實現列印,即便重定向也一樣,錯誤使用err。
 **/
public class JunitTest {

    //spring的RestTemplate,它實現的是RestOperations介面,裡面有好多方法,即get,post,put,delete。
    private RestTemplate template = new RestTemplate();

    @SuppressWarnings("unchecked")
    @Test
    public void test(){

        //程式開始執行時間
        long start = System.currentTimeMillis();

        for (int i = 0; i < 1000; i++) {
			//異常處理
            try {
                //String url = "http://localhost:" + 8090 +"/find?tag=ns=1002;s=TZ_HD_1106_SW.PV&startTime=2018-08-13 04:09:09&endTime=2018-08-13 23:59:59";
                String url = "http://localhost:" + 8090 + "findTest";
                ArrayList<String> result = template.getForObject(url, ArrayList.class);
				//Junit的靜態方法  assertTrue:判斷兩個值是否相等 ,如果為true,則執行success,反之Failure ; 沒有錯誤提示
                Assert.assertTrue("通過主資料的標準化編碼進行查詢=>測試失敗", result.size()>0);
                System.err.println(result);
            }catch (Exception e){
                e.printStackTrace();
            }
        }
		
		//程式執行結束時間
        long end = System.currentTimeMillis();
		
        System.out.println("程式執行時間:" + (end - start) + "ms");
    }
}

我這個程式碼裡面包含了測試時間,但是如果你用idea進行測試的話,可以不寫這個測試時間,因為 程式上自帶的執行時間,不過每次都要關閉這個測試視窗,不然時間可能會累積

其中,我還遇到了個報錯

返回型別不對,這裡我就犯了個錯,每次一看到.class 反射性的以為是那個類呢,但是在這裡並不是,而是Class型別的泛型!!