在我们的测试中需要使用一些名称生成器,因此我们使用了:
<dependency>
<groupId>com.github.javafaker</groupId>
<artifactId>javafaker</artifactId>
</dependency>
Faker faker = new Faker();
String firstName = faker.name().firstName();
String lastName = faker.name().lastName();
工作原理非常清晰。但是有时我们会失败,因为姓氏中生成了'
,例如O'Keefe
,D'Amore
。要求是不要在那里使用'
。为了解决这个问题,在使用faker
实例(如下一个实例)之前,我已经使用了一些表达式:
faker.expression("[A-Za-z]+");
...以及其他(#{regexify '(A-Za-z)'}
,#{regexify '[A-Za-z]+'}
...),但这无济于事。 (我仍然可以检测到姓氏中的'
。)
是否有解决此问题的想法?
可以通过表达式replaceAll
使用[^A-Za-z]
以仅允许字母字符:
Faker faker = new Faker();
String firstName = faker.name().firstName();
String lastName = faker.name().lastName().replaceAll("[^A-Za-z]", "");
Faker有一堆yml文件,这些文件具有最流行的名称/姓氏等。支持一堆语言环境。解决问题的方法是为自定义区域设置提供自定义文件。
Faker faker = new Faker(new Locale("en","TEST"));
自定义文件示例(en-TEST.yml
):
en-TEST:
faker:
name:
name:
- "#{first_name} #{last_name}"
first_name: [
Adedayo
]
last_name: [
Tella
]
因此您可以从默认文件(last_name
locale)复制en
值,并删除所有您不喜欢的内容。 Faker将拾取自定义文件,并将其用于随机生成。
ps.s。作为一种选择,您可以只浏览现有文件,然后找到一个没有错误姓氏的文件(en-NG
似乎可以满足您的需求)。但是,不能保证新版本的faker会保留相同的值。