對openfeign不清楚的同學可以參考下我的這篇文章:springboot~openfeign從此和httpclient說再見
對于openfeign來說,幫助我們解決了服務端調用服務端的問題,你不需要關心服務端的uri,只需要知道它在eureka里的服務名稱即可,同時你與服務端確定了服務方法的參數和返回值之后,我們可以在單元測試時mock這些服務端方法即可,真正做到了單元測試,而不需要與外界資源進行交互。
今天主要說一下在openfeign里讀取json文件的問題,我們將測試所需要的數據存儲到文件里,在修改時關注點比較單純。
json幫助類,主要使用了objectmapper這個對象
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
/** * 將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文件的內容
1
2
3
4
5
6
7
8
9
10
11
12
13
|
@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文件讀取數據問題,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!
原文鏈接:https://www.cnblogs.com/lori/archive/2018/06/11/9166351.html