springboot~openfeign從JSON文件讀取數據


對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環境中,在生產環境里,將使用真正的服務。

感謝各位閱讀!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM