如何用java faker创建一个连贯的对象

问题描述 投票:0回答:3

我正在尝试使用java faker创建一个对象

user
,并且变量不一致(如果我创建用户名,它可能是
bob
,用户名可能是
jhon.smith

这是我创建假用户的代码:

public static User userRandom() {

    User p = new User();
    Faker faker = new Faker(new Locale("ES"));

    int ramdomN = faker.number().numberBetween(0, 1);
    char sex;
    if (ramdomN == 0) {
        sex = 'M';
    } else {
        sex = 'F';
    }

    faker.name().fullName();
    p.setEmail(faker.name().username() + "@lucatinder.org");
    p.setAge(faker.number().numberBetween(18, 90));
    p.setGender(sex);
    p.setName(faker.name().fullName());
    p.setPassword(faker.lorem().characters(8, 16));

    return p;
}

我希望输出是:

email: Elisa@lucatinder.org,
Password: gki5ra4l2v,
name: Elisa Robledo Robledo,
age: 33,
Gender: F, (Female)

但是实际输出是:

Email: Elisa@lucatinder.org,
Password: gki5ra4l2v,
name: Carlota Robledo Robledo,
age: 33,
Gender: M, (male)

这是错误的,因为在

email
name
中我有不同的名字,Elisa 是女性,但
gender
是男性

java faker
3个回答
3
投票

您的代码的问题是每次调用

faker.name().fullName()
都会生成一个新名称。 (此外,
faker.name().username()
与任何先前生成的全名没有关系。)

您可以将代码更改为:
(假设每个

fullName
至少由两部分组成,中间用空格分隔)

String fullName = faker.name().fullName();
String firstName = fullName.substring(fullName.indexOf(' '));

p.setEmail(firstName + "@lucatinder.org");
p.setAge(faker.number().numberBetween(18, 90));
p.setGender(sex);
p.setName(fullName);
p.setPassword(faker.lorem().characters(8, 16));

但是,这并不能解决您的

gender
问题,因为这似乎不是受支持的功能。
请在 github 项目上检查相关的
issue

无论您尝试如何处理生成的数据,如果性别与姓名不匹配(通常)应该不会有问题。


1
投票

根据 Faker 文档,每次调用

.name()
时,您都会得到不同的名称。

每次调用 fake.name() 方法都会产生不同的(随机)结果。这是因为 faker 将 faker.Generator.method_name() 调用转发给 faker.Generator.format(method_name)。


0
投票

是的,我也遇到了同样的问题。这是设计使然。 JavaFaker 类(最初基于 Ruby 语言中的 Gem)的目的是回滚与实体类型匹配的随机数据......给定实体没有一组连贯的数据。

需要的是一种回退基本实体(例如名称对象或地址对象),然后将其中包含的数据转换为某种实例对象的方法。但根据 JavaFaker 类的编写方式,我认为尝试捕获单个实体集并不是预期用途。我什至不确定地址中返回的数据是否关联......我认为 JavaFaker 类中的每个实体/数据属性都是相互隔离的。您可以创建基础对象,但 JavaFaker 类仍然“随机”为每个子属性生成值。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.