Используйте фейкер для генерации фамилий Java, но только буквы - PullRequest
0 голосов
/ 30 октября 2019

Требуется использовать генератор имен в наших тестах, поэтому мы использовали:

<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]+'} ...), но это нене поможет(В любом случае я могу обнаружить ' в фамилиях.)

Есть какие-нибудь идеи, как решить проблему?

Ответы [ 2 ]

1 голос
/ 30 октября 2019

В 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 значения из файла по умолчанию (en locale) и удалить все, что вам не нравится. Faker подберет пользовательский файл и будет использовать его для случайной генерации.

ps В качестве опции вы можете просто просмотреть существующие файлы и просто найти файл без плохих фамилий (en-NG, кажется, подходит для ваших нужд). Однако не гарантируется, что новые версии фейкера сохранят те же значения.

1 голос
/ 30 октября 2019

Можно использовать replaceAll, используя выражение [^A-Za-z], чтобы разрешить только буквенные символы:

Faker faker = new Faker();
String firstName = faker.name().firstName();
String lastName = faker.name().lastName().replaceAll("[^A-Za-z]", "");
...