Faker(java)で色々なテスト用のダミーデータを生成する

# はじめに

Fakerは氏名や住所などのテストデータを作成する際に使用できるライブラリです。
様々な言語でライブラリがあり、Javaでは以下の「Java Faker」が有名なようです。

Java Faker
https://github.com/DiUS/java-faker


# まずはライブラリを追加

Mavenの場合は以下のようにライブラリの依存関係を追加します。

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

# ダミーデータを生成してみる

使い方は簡単で、以下のようなコードを書くと、

```java
	private void dummy() {
		Faker faker = new Faker(new Locale("ja_JP"));

		System.out.println(faker.name().fullName());
		System.out.println(faker.name().firstName());
		System.out.println(faker.name().lastName());
		System.out.println(faker.address().zipCode());
		System.out.println(String.join(faker.address().state(), faker.address().city(), faker.address().cityName()));
	}
```

次のようにダミーデータが生成されます。

```
竹内 誠
愛美
後藤
213-0541
埼玉県原町陽子郡
```

住所はfaker.address().fullAddress()でも取得できますが、
「345 未来Terrace, 大和市, 32 894-1403」のように順番が逆に出力されるのでいまいち。

他にもメールアドレス、ファイル名、URL、色、本など様々なデータを生成することができます。

# フォーマットを指定してみる

また、以下のようにフォーマットを指定してダミーデータを生成することもできます。gmail.comのメールアドレスを10個生成しています。

```java
	private void dummy2() {
		FakeValuesService fakeValuesService = new FakeValuesService(
			      new Locale("ja_JP"), new RandomService());
		IntStream.range(0, 10).forEach(i -> System.out.println(fakeValuesService.bothify("??####@gmail.com"))); // ?は英字、#は数字
	}
```

実行結果

```
nz5293@gmail.com
vw3994@gmail.com
gv1143@gmail.com
av6399@gmail.com
hp1906@gmail.com
da7731@gmail.com
ew3615@gmail.com
gv2515@gmail.com
dm7073@gmail.com
fu4227@gmail.com
```

# ランダムの数値を生成する

10桁の数値を生成する場合は以下のように記述する。

faker.number().randomNumber(10, true)

以下、コードと実行結果

```java
	private void dummy3() {
		Faker faker = new Faker(new Locale("ja_JP"));

		IntStream.range(0, 10).forEach(i -> System.out.println(faker.number().randomNumber(10, true)));
	}
```

```
1324687562263
3958356750281
8654092665509
4641056803394
1610358318650
1541823905182
1182616958335
7453193108824
7835740448808
9378928785264
```

# 文章を生成する

5つの単語で文章を生成する。
Localeはjpにしたけど、日本語は生成されませんでした。

faker.lorem().sentence(5)

```
	private void dummy4() {
		Faker faker = new Faker(new Locale("ja_JP"));
		IntStream.range(0, 10).forEach(i -> System.out.println(faker.lorem().sentence(5)));
	}
```

```
Sunt saepe fugiat sunt eum perferendis quia placeat voluptas similique.
Explicabo repellendus qui praesentium fugiat harum excepturi qui.
Architecto ea aliquid debitis in.
Omnis labore aut ut laudantium minima labore ut.
Facilis velit eum repudiandae sint commodi.
Consequatur voluptatem commodi incidunt consequuntur.
Iure exercitationem nihil optio laudantium provident aut.
Cumque earum hic eligendi cumque id quia quasi laborum rem.
Ut provident et corrupti sed dignissimos.
Facilis odit illo id et aliquam.
```

# 文字数を指定して文章を生成する

500文字の文章を生成する。

faker.lorem().fixedString(500)

```
	private void dummy5() {
		Faker faker = new Faker(new Locale("ja_JP"));
		System.out.println(faker.lorem().fixedString(500));
	}
```

```
Sint soluta dolorum eos est vero quam.Earum consectetur qui corrupti.Similique fugit rerum velit et repellat corrupti facere.Et inventore commodi fugit.Aperiam dolorem laudantium.Quis ut consequatur qui facilis aliquam.Hic a vitae omnis quia sint id.Atque est in voluptatum quidem ut.Dolore dolor ex dolor fugiat.Error est et quae quia sit dolores voluptatem.Nihil tempora nobis illo.Et dolorem voluptatem laboriosam consequuntur.Repellat at recusandae amet voluptas quam consequatur est.Fuga eveniet

```

# 正規表現で生成する。

正規表現で生成する。

fakeValuesService.regexify("[12]\\d{3}/(0?[1-9]|1[0-2])/([12][0-9]|3[01]|0?[1-9])")

```java
	private void dummy6() {
	    FakeValuesService fakeValuesService = new FakeValuesService(
	    	      new Locale("ja_JP"), new RandomService());
	    System.out.println(fakeValuesService.regexify("[12]\\d{3}/(0?[1-9]|1[0-2])/([12][0-9]|3[01]|0?[1-9])"));
	}
```

```
1147/5/30
```