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

如何使用java faker创建连贯的对象,java,faker,Java,Faker,我试图用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); cha

我试图用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)

这是错误的,因为在
电子邮件
姓名
中,我有不同的名字,而Elisa是女性,但
性别
是男性

你的代码的问题是每次调用
faker.name().fullName()
都会生成一个新名字。(另外,
faker.name().username()
与以前生成的任何全名都没有关系。)

您可以将代码更改为:
(假设每个
fullName
至少由两部分组成,用空格分隔)

但是,这并不能解决您的
性别问题,因为这似乎不是一个受支持的功能。
请在github项目上查看相关内容

无论您如何处理生成的数据,如果性别与姓名不匹配,通常不会出现问题。

根据,每次调用
.name()
,您似乎都会得到不同的姓名

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


你是根据一个随机数生成器来决定性别的,当然这和他们的名字不匹配,你的预期输出是基于什么假设的?您的用户是使用随机值生成的。您可以对gendera使用
faker.demographic().sex()
,正如我在代码
name()
中所看到的,仅转发到匹配的生成器。之后的方法调用生成一个新的东西。另外,您的链接没有指向所述库的
java
版本。
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));