zoukankan      html  css  js  c++  java
  • 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环境中,在生产环境里,将使用真正的服务。

    感谢各位阅读!

  • 相关阅读:
    zoj 3135 Party of 8g 最大点权独立集
    hdu 5352 MZL's City 最小费用最大流
    hdu 5351 MZL's Border 打表+高精度
    poj 3155 Hard Life 最大密度子图
    希尔排序的温习
    折半查找法的温习
    几所可能去的院校之对比与抉择
    重温排序算法
    5-17 汉诺塔的非递归实现 (25分)
    c语言从文件中读取数据作为输入
  • 原文地址:https://www.cnblogs.com/lori/p/9166351.html
Copyright © 2011-2022 走看看