Panduan untuk JavaFaker

1. Ikhtisar

JavaFaker adalah pustaka yang dapat digunakan untuk menghasilkan beragam data yang tampak nyata dari alamat hingga referensi budaya populer.

Dalam tutorial ini, kita akan melihat bagaimana menggunakan kelas JavaFaker untuk menghasilkan data palsu. Kami akan mulai dengan memperkenalkan kelas Faker dan FakeValueService , sebelum melanjutkan ke pengenalan lokal untuk membuat data lebih spesifik ke satu tempat.

Terakhir, kita akan membahas betapa uniknya datanya. Untuk menguji kelas JavaFaker, kami akan menggunakan ekspresi reguler, Anda dapat membaca lebih lanjut di sini.

2. Dependensi

Di bawah ini adalah satu ketergantungan yang kita perlukan untuk memulai dengan JavaFaker.

Pertama, ketergantungan yang kami perlukan untuk proyek berbasis Maven:

 com.github.javafaker javafaker 0.15 

Untuk pengguna Gradle, Anda dapat menambahkan berikut ini ke file build.gradle Anda :

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

3. FakeValueService

Kelas FakeValueService menyediakan metode untuk membuat urutan acak serta menyelesaikan file .yml yang terkait dengan lokal.

Di bagian ini, kita akan membahas beberapa metode berguna yang ditawarkan FakerValueService .

3.1. Letterify , Numerify , dan Bothify

Tiga metode yang berguna adalah Letterify , Numberify , dan Bothify . Letterify membantu menghasilkan urutan acak karakter alfabet .

Selanjutnya, Numerify hanya menghasilkan urutan numerik.

Terakhir, Bothify adalah kombinasi keduanya dan dapat membuat urutan alfanumerik acak - berguna untuk mengejek hal-hal seperti string ID.

FakeValueService membutuhkan Lokal yang valid , serta 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()); }

Dalam pengujian unit ini, kami membuat FakeValueService baru dengan lokal en-GB dan menggunakan metode bothify untuk menghasilkan alamat Gmail palsu yang unik .

Ini bekerja dengan mengganti ' ?' dengan huruf acak dan '#' dengan nomor acak . Kami kemudian dapat memeriksa apakah hasilnya benar dengan pemeriksaan Matcher sederhana .

3.2. Regexify

Demikian pula, regexify menghasilkan urutan acak berdasarkan pola regex yang dipilih .

Dalam cuplikan ini, kita akan menggunakan FakeValueService untuk membuat urutan acak mengikuti regex yang ditentukan:

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

Kode kami membuat string alfanumerik huruf kecil dengan panjang 10 . Pola kami memeriksa string yang dihasilkan terhadap regex.

4. Kelas Faker JavaFaker

The Faker kelas memungkinkan kita untuk menggunakan data kelas palsu JavaFaker ini .

Di bagian ini, kita akan melihat cara membuat instance objek Faker dan menggunakannya untuk memanggil beberapa data palsu:

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

Di atas, kami menggunakan objek Alamat Faker untuk menghasilkan alamat acak .

Saat kami menjalankan kode ini, kami akan mendapatkan contoh output:

3188 Dayna Mountains New Granvilleborough Tonga

Kami dapat melihat bahwa data tidak memiliki satu lokasi geografis karena kami tidak menentukan lokasi. Untuk mengubahnya, kita akan belajar membuat data lebih relevan dengan lokasi kita di bagian selanjutnya.

Kita juga bisa menggunakan objek faker ini dengan cara yang mirip untuk membuat data yang berhubungan dengan lebih banyak objek seperti:

  • Bisnis
  • Bir
  • Makanan
  • Nomor telepon

Anda dapat menemukan daftar lengkapnya di sini.

5. Memperkenalkan Lokal

Di sini, kami akan memperkenalkan cara menggunakan bahasa lokal untuk membuat data yang dihasilkan lebih spesifik untuk satu lokasi . Kami akan memperkenalkan Faker dengan lokal AS, dan lokal Inggris:

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

Di atas, kami melihat bahwa kedua Faker dengan lokal cocok dengan ekspresi reguler mereka untuk kode pos negara.

Jika lokal yang diteruskan ke Faker tidak ada, Faker akan melontarkan LocaleDoesNotExistException .

Kami akan menguji ini dengan unit test berikut:

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

6. Keunikan

Meskipun JavaFaker tampaknya menghasilkan data secara Acak, keunikannya tidak dapat dijamin .

JavaFaker supports seeding of its pseudo-random number generator (PRNG) in the form of a RandomService to provide the deterministic output of repeated method calls.

Simply put, pseudorandomness is a process that appears random but is not.

We can see how this works by creating two Fakers with the same seed:

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

The above code returns the same name from two different fakers.

7. Conclusion

In this tutorial, we have explored the JavaFaker library to generate real-looking fake data. We've also covered two useful classes the Faker class and the FakeValueService class.

We explored how we can use locales to generate location specific data.

Terakhir, kami membahas bagaimana data yang dihasilkan hanya tampak acak dan keunikan data tidak dijamin.

Seperti biasa, potongan kode dapat ditemukan di GitHub.