【问题标题】:Faker Api not returning country specific addressFaker Api 未返回特定国家/地区的地址
【发布时间】:2019-07-06 21:30:01
【问题描述】:

我正在尝试使用 com.github.javafaker API 编写一些健壮的测试脚本。 API 有一个特定于语言环境的构造函数,但它不返回特定于语言环境的国家/地区地址。

我编写了一个示例 Junit 来仅测试 fakerApi,然后再依赖它来测试我的应用程序。

public class FakerUtils {

    public static Faker getFakerByISO3CountryCode(String ISO3CountryCode) {
        return SingletonWrapperFaker.countryCodeFakerMap.get(ISO3CountryCode);
    }

    private static class SingletonWrapperFaker {
        static Map<String, Faker> countryCodeFakerMap = new HashMap<>();

    static {
        Arrays.asList(Locale.getAvailableLocales())
           .forEach(locale -> {
                try {
                     countryCodeFakerMap.put(locale.getISO3Country(), new Faker(locale));
                }catch(Exception e){
                //every locale is not implemented.
                }
            });
        }
    }
    public static Faker getRandomFaker() {
        return null; //TODO: implement it
            }
}

测试类

public class FakerUtilsTest {
@Test
    public void testGFakerByISO3CountryCode() {
        Address address =  FakerUtils.getFakerByISO3CountryCode("USA").address();       
        assertEquals("US",address.countryCode());
    }
}

每次返回不同的国家。 我认为也许 API 有一个限制,只能创建一种类型的对象。 因此,我尝试不使用 Faker 填充地图,而只是将语言环境保留在地图中以便快速查找,并在每次 getFaker...() 调用时创建一个新的基于语言环境的 faker 对象。但还是不行

调试后更新

我意识到 api 并不打算以我使用的方式使用。 语言环境只是翻译给定语言。 使用语言环境创建的同一对象,例如 Locale.FRANCE 可以返回不同的国家/地址或世界上的任何内容,而与构造函数参数无关。 这是一个非常随机的 API,它有不同的用途。

我在调试会话中对同一对象调用了 .countryCode()。 我通过在 Faker 构造函数中为 USA 提供语言环境来获得地址对象,但每次返回一个新的国家代码时。

address.countryCode()
     (java.lang.String) GN
     (java.lang.String) LC
     (java.lang.String) SH
     (java.lang.String) NF
     (java.lang.String) BZ

【问题讨论】:

    标签: java faker


    【解决方案1】:

    Faker API 使用资源来生成数据。 我查看了美国语言环境的资源:@​​987654321@,但没有找到使用here 的address.country_code 路径。

    您的问题已解释here

    那里有一个问题是由于缺少该语言环境的数据引起的。因此,如果没有特定于该语言环境的数据,所有语言环境都将默认为英语语言环境。因此,国家/地区会查找法语数据,但当不存在时,它将使用英语数据。

    如果您可以访问 Locale,则应使用 Locale 中的国家/地区代码。

    【讨论】:

      猜你喜欢
      • 2021-05-02
      • 2016-01-31
      • 2017-08-28
      • 2020-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      相关资源
      最近更新 更多