1.概要


JavaFaker

は、住所から人気のある文化関連資料まで、実際に見えるさまざまなデータを生成するために使用できるライブラリです。

このチュートリアルでは、JavaFakerのクラスを使用して偽のデータを生成する方法について説明します。まず、

Faker

クラスと

FakeValueService

を導入してから、データを特定の場所に限定するためのロケールの導入に進みます。

最後に、データがどれほどユニークであるかについて説明します。 JavaFakerのクラスをテストするには、正規表現を使用します。それらについて詳しくは、https://www.baeldung.com/regular-expressions-java[ここ]を参照してください。

2.依存関係

下記はhttps://search.maven.org/classic/#search%7Cgav%7C1%7Cg%3A%22com.github.javafaker%22%20AND%20a%3A%22javafaker%22[dependency]です。 JavaFakerを使い始める必要があります。

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

<dependency>
    <groupId>com.github.javafaker</groupId>
    <artifactId>javafaker</artifactId>
    <version>0.15</version>
</dependency>

Gradleユーザーの場合は、

__ build.gradle

__fileに以下を追加できます。

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

3.

FakeValueService


FakeValueService

クラスは



http://dius.github.io/java-faker/apidocs/index.html



とリンクに関連する

.yml

ファイルを解決することを提供します:#locales[ロケール]。

このセクションでは、

FakerValueService

が提供しなければならない便利なメソッドについて説明します。

3.1.

Letterify



Numerify

、および

Bothify

3つの便利なメソッドは

Letterify



Numberify

、および

Bothify

です。


Letterify

は、

アルファベット文字のランダムなシーケンス

を生成するのに役立ちます。

次に、

Numerify

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

最後に、

Bothify

は2つの組み合わせで、ランダムな英数字シーケンスを作成することができます。


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のロケールで新しい

FakeValueService



を作成し、

bothify

__メソッドを使用して、固有の偽のGmailアドレスを生成します。

これは



?」

をランダムな文字で置き換え、


#をランダムな数字で置き換えます

。その後、単純な

Matcher

チェックで出力が正しいことを確認できます。

3.2. 正規表現

同様に、


regexify

は、選択した正規表現パターン

に基づいてランダムなシーケンスを生成します。

このスニペットでは、

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());
}

私たちの

コードは、長さ10

の小文字の英数字ストリングを作成します。私たちのパターンは正規表現に対して生成された文字列をチェックします。

4. JavaFakerの

Faker

クラス


Faker

クラス

によって、JavaFakerの偽のデータクラス

を使用できます。

このセクションでは、

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

オブジェクトを使用しています

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

3188
Dayna Mountains
New Granvilleborough
Tonga

ロケールを指定していないため、

データには単一の地理的位置はありません

。これを変更するために、次のセクションで、データを現在地とより関連性のあるものにすることを学びます。

この

faker

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

  • ビジネス

  • ビール

  • 食べ物

  • 電話番号

あなたは完全なリストhttps://github.com/DiUS/java-fakerを見つけることができます

5.ロケールの紹介

ここでは、ロケールを使用して生成されたデータを単一の場所に限定する方法を紹介します。アメリカのロケールとイギリスのロケールで

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

が、国の郵便番号の正規表現と一致しています。


  • Faker

    に渡されたロケールが存在しない場合、

    Faker



    LocaleDoesNotExistException

    ** をスローします。

これを次のユニットテストでテストします。

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

6.一意性

JavaFakerは

ランダムにデータを生成しますが、一意性は保証されません

  • JavaFakerは、

    RandomService

    の形式で疑似乱数ジェネレータ(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人の__差別のある人から同じ名前を返します。

7.まとめ

このチュートリアルでは、実物のような偽のデータを生成するために** JavaFakerライブラリを調べました。また、

Faker

クラスと

FakeValueService

クラスという2つの便利なクラスについても説明しました。

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

最後に、生成されたデータがランダムに見えるだけで、データの一意性が保証されないことを説明しました。

いつものように、コードスニペットはhttps://github.com/eugenp/tutorials/tree/master/testing-modules/testing[続き]

https://github.com/eugenp/tutorials/tree/master/testing

– モジュール/テスト[GitHub]。