Springboot+Junit 模擬測試 Get請求
阿新 • • 發佈:2019-02-18
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型別的泛型!!