springboot~openfeign從JSON文件讀取數據
阿新 • • 發佈:2018-06-11
path 服務 clas tcl public 運行 ati gis row
對openfeign不清楚的同學可以先看我這篇文章:springboot~openfeign從此和httpClient說再見
對於openfeign來說,幫助我們解決了服務端調用服務端的問題,你不需要關心服務端的URI,只需要知道它在eureka裏的服務名稱即可,同時你與服務端確定了服務方法的參數和返回值之後,我們可以在單元測試時mock這些服務端方法即可,真正做到了單元測試,而不需要與外界資源進行交互。
今天主要說一下在openfeign裏讀取JSON文件的問題,我們將測試所需要的數據存儲到文件裏,在修改時關註點比較單純。
JSON幫助類,主要使用了objectMapper這個對象
/*** 將json轉換為對象. * * @param path 文件路徑 */ public <T> T fromJson(String path, Class<T> cls) { try { return objectMapper.readValue(this.fromResource(path, Charsets.UTF_8), cls); } catch (Exception e) { throw new IllegalStateException("讀取json失敗:" + path, e); } }/** * 將json數組轉換為對象列表. * * @param path 文件路徑 */ public <T> List<T> listFromJson(String path, TypeReference typeReference) { try { return objectMapper.readValue(fromResource(path, Charsets.UTF_8), typeReference); } catch (Exception e) { throw new IllegalStateException("讀取json失敗:" + path, e); } }
在Mock類型中,可以使用這個方法讀JSON文件的內容
@Configuration @Profile("integTest") public class ServiceClientMock { @Bean public ServiceClient registerServiceClient() { AccountClient client = mock(AccountClient.class); when(client.del( anyString(), anyString(), anyString(), anyMap())).thenReturn(fromJson("order/orders.json", Map.class)); } }
上面代碼主要在模擬了ServiceClient對象裏的del方法,有三個字符型輸入參數,返回值從JSON文件讀取,在單元測試裏,直接註入的是ServiceClientMock對象,我們
可以從@Profile註解裏看到,它運行在integTest環境中,在生產環境裏,將使用真正的服務。
感謝各位閱讀!
springboot~openfeign從JSON文件讀取數據