JavaFakerガイド

JavaFakerのガイド

1. 概要

JavaFakerは、住所から大衆文化の参照まで、さまざまなリアルなデータを生成するために使用できるライブラリです。

このチュートリアルでは、JavaFakerのクラスを使用して偽のデータを生成する方法を見ていきます。 まず、FakerクラスとFakeValueServiceを紹介してから、ロケールを紹介してデータを1つの場所に固有のものにします。

最後に、データの独自性について説明します。 JavaFakerのクラスをテストするために、正規表現を使用します。それらの詳細については、hereを参照してください。

2. 依存関係

以下は、JavaFakerの使用を開始するために必要な単一のdependencyです。

まず、Mavenベースのプロジェクトに必要な依存関係は次のとおりです。


    com.github.javafaker
    javafaker
    0.15

Gradleユーザーの場合、build.gradle fileに以下を追加できます。

compile group: 'com.github.javafaker', name: 'javafaker', version: '0.15'

3. FakeValueService

FakeValueServiceクラスは、methods for generating random sequences を提供し、localeに関連付けられた.ymlファイルを解決します。

このセクションでは、FakerValueServiceが提供する必要のある便利なメソッドのいくつかについて説明します。

3.1. LetterifyNumerify、およびBothify

3つの便利な方法は、LetterifyNumberify、およびBothifyです。 Letterifyは、random sequences of alphabetic charactersの生成に役立ちます。

次に、Numerifyは単純に数値シーケンスを生成します。

最後に、Bothifyは2つの組み合わせであり、create random alphanumeric sequencesを使用できます。これはID文字列などのモックに役立ちます。

FakeValueServiceには、有効なLocale,RandomService:が必要です

@Test
public void whenBothifyCalled_checkPatternMatches() throws Exception {

    FakeValuesService fakeValuesService = new FakeValuesService(
      new Locale("en-GB"), new RandomService());

    String email = fakeValuesService.bothify("????##@gmail.com");
    Matcher emailMatcher = Pattern.compile("\\w{4}\\d{2}@gmail.com").matcher(email);

    assertTrue(emailMatcher.find());
}

この単体テストでは、ロケールがen-GB use the bothify method to generate a unique fake Gmail addresscreate a new FakeValueServiceを使用します。

replacing ‘?' with random letters and ‘#' with random numbersで動作します。 次に、単純なMatcherチェックで出力が正しいことを確認できます。

3.2. 正規表現

同様に、regexify generates a random sequence based on a chosen regex pattern

このスニペットでは、FakeValueServiceを使用して、指定された正規表現に続くランダムシーケンスを作成します。

@Test
public void givenValidService_whenRegexifyCalled_checkPattern() throws Exception {

    FakeValuesService fakeValuesService = new FakeValuesService(
      new Locale("en-GB"), new RandomService());

    String alphaNumericString = fakeValuesService.regexify("[a-z1-9]{10}");
    Matcher alphaNumericMatcher = Pattern.compile("[a-z1-9]{10}").matcher(alphaNumericString);

    assertTrue(alphaNumericMatcher.find());
}

code creates a lower-case alphanumeric string of length 10。 パターンは、生成された文字列を正規表現と照合します。

4. JavaFakerのFakerクラス

Fakerクラスallows us to use JavaFaker’s fake data classes

このセクションでは、Fakerオブジェクトをインスタンス化し、それを使用して偽のデータを呼び出す方法を説明します。

Faker faker = new Faker();

String streetName = faker.address().streetName();
String number = faker.address().buildingNumber();
String city = faker.address().city();
String country = faker.address().country();

System.out.println(String.format("%s\n%s\n%s\n%s",
  number,
  streetName,
  city,
  country));

上記では、Faker Address object to generate a random addressを使用しています。

このコードを実行すると、出力の例が表示されます。

3188
Dayna Mountains
New Granvilleborough
Tonga

ロケールを指定しなかったため、data has no single geographical locationであることがわかります。 これを変更するために、次のセクションでデータを現在地との関連性を高める方法を学びます。

同様の方法でこのfakerオブジェクトを使用して、次のようなさらに多くのオブジェクトに関連するデータを作成することもできます。

  • ビジネス

  • Beer

  • Food

  • 電話番号

完全なリストhereを見つけることができます。

5. ロケールの紹介

ここでは、use locales to make the generated data more specific to a single locationの方法を紹介します。 米国のロケールと英国のロケールでFakerを紹介します。

@Test
public void givenJavaFakersWithDifferentLocals_thenHeckZipCodesMatchRegex() {

    Faker ukFaker = new Faker(new Locale("en-GB"));
    Faker usFaker = new Faker(new Locale("en-US"));

    System.out.println(String.format("American zipcode: %s", usFaker.address().zipCode()));
    System.out.println(String.format("British postcode: %s", ukFaker.address().zipCode()));

    Pattern ukPattern = Pattern.compile(
      "([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|"
      + "(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([A-Za-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y]"
      + "[0-9]?[A-Za-z]))))\\s?[0-9][A-Za-z]{2})");
    Matcher ukMatcher = ukPattern.matcher(ukFaker.address().zipCode());

    assertTrue(ukMatcher.find());

    Matcher usMatcher = Pattern.compile("^\\d{5}(?:[-\\s]\\d{4})?$")
      .matcher(usFaker.address().zipCode());

    assertTrue(usMatcher.find());
}

上記では、ロケールを持つ2つのFakersが、国の郵便番号の正規表現と一致していることがわかります。

If the locale passed to the Faker does not exist, the Faker throws a LocaleDoesNotExistException

これを次の単体テストでテストします。

@Test(expected = LocaleDoesNotExistException.class)
public void givenWrongLocale_whenFakerInitialised_testExceptionThrown() {
    Faker wrongLocaleFaker = new Faker(new Locale("en-seaWorld"));
}

6. 一意性

JavaFakerseemingly generates data at Random, the uniqueness cannot be guaranteedの間。

RandomServiceの形式のJavaFaker supports seeding of its pseudo-random number generator (PRNG)は、繰り返されるメソッド呼び出しの決定論的な出力を提供します。

簡単に言えば、擬似ランダム性はランダムに見えるプロセスですが、そうではありません。

同じシードで2つのFakersを作成することで、これがどのように機能するかを確認できます。

@Test
public void givenJavaFakersWithSameSeed_whenNameCalled_CheckSameName() {

    Faker faker1 = new Faker(new Random(24));
    Faker faker2 = new Faker(new Random(24));

    assertEquals(faker1.name().firstName(), faker2.name().firstName());
}

上記のコードは、2つのdifferent fakers.から同じ名前を返します

7. 結論

このチュートリアルでは、JavaFaker library to generate real-looking fake dataを調べました。 また、FakerクラスとFakeValueServiceクラスの2つの便利なクラスについても説明しました。

ロケールを使用して場所固有のデータを生成する方法を検討しました。

最後に、data generated only seems randomとデータの一意性が保証されない方法について説明しました。

いつものように、コードスニペットはGitHubにあります。