gpt4 book ai didi

java - Faker Api 未返回国家/地区特定地址

转载 作者:行者123 更新时间:2023-12-02 03:23:17 25 4
gpt4 key购买 nike

我正在尝试使用 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 填充 map ,而只是将语言环境保留在 map 中以便快速查找,并在每次 getFaker...() 调用时创建一个新的基于语言环境的 faker 对象。但还是没用

调试后更新

我意识到该 API 并不适合按照我使用的方式使用。区域设置只是翻译成给定的语言。使用语言环境创建的同一对象(例如 Locale.FRANCE)可以返回不同的国家/地址或世界上的任何内容,而不管构造函数参数如何。这是一个非常随机的 API,它有不同的用途。

我在调试 session 中对同一对象调用了 .countryCode()。我通过在 Faker 构造函数中提供美国区域设置来获取地址对象,但每次都会返回新的国家/地区代码。

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

最佳答案

Faker API 使用资源来生成数据。我查看了美国语言环境的资源:https://github.com/DiUS/java-faker/blob/master/src/main/resources/en-US.yml我没有找到使用 hereaddress.country_code 路径.

您的问题已得到解释here

There is a problem there which is caused by lack of data for that locale. So all locales will default to the english locale if there is no data specific to that locale. So country will look for French data but when that doesn't exist, it'll use the English one.

如果您有权访问区域设置,则应使用区域设置中的国家/地区代码。

关于java - Faker Api 未返回国家/地区特定地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56917802/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com