JavaFakerガイド
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]。