Panduan untuk JavaFaker

1. Gambaran keseluruhan

JavaFaker adalah perpustakaan yang dapat digunakan untuk menghasilkan sejumlah besar data yang nyata dari alamat hingga rujukan budaya yang popular.

Dalam tutorial ini, kita akan melihat bagaimana menggunakan kelas JavaFaker untuk menghasilkan data palsu. Kita akan mulakan dengan memperkenalkan kelas Faker dan FakeValueService , sebelum beralih memperkenalkan bahasa tempatan untuk menjadikan data lebih spesifik untuk satu tempat.

Akhirnya, kita akan membincangkan betapa uniknya data tersebut. Untuk menguji kelas JavaFaker, kami akan menggunakan ungkapan biasa, anda boleh membaca lebih lanjut mengenai mereka di sini.

2. Kebergantungan

Di bawah ini adalah satu pergantungan yang perlu kita mulakan dengan JavaFaker.

Pertama, kebergantungan yang kita perlukan untuk projek berasaskan Maven:

 com.github.javafaker javafaker 0.15 

Untuk pengguna Gradle, anda boleh menambahkan yang berikut ke fail build.gradle anda :

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

3. Perkhidmatan FakeValue

The FakeValueService kelas menyediakan kaedah untuk menjana jujukan rawak serta menyelesaikan .yml fail yang berkaitan dengan penempatan.

Di bahagian ini, kami akan membahas beberapa kaedah berguna yang ditawarkan oleh FakerValueService .

3.1. Huruf , Numerify , dan Bothify

Tiga kaedah yang berguna adalah Letterify , Numberify , dan Bothify . Letterify membantu menghasilkan urutan huruf abjad secara rawak .

Seterusnya, Numerify hanya menghasilkan urutan angka.

Akhirnya, Bothify adalah gabungan kedua-duanya dan dapat membuat urutan alfanumerik rawak - berguna untuk mengejek perkara seperti rentetan ID.

FakeValueService memerlukan Lokasi yang sah , dan juga 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 ujian unit ini, kami membuat FakeValueService baru dengan lokasi en-GB dan menggunakan kaedah kedua - duanya untuk menghasilkan alamat Gmail palsu yang unik .

Ia berfungsi dengan menggantikan ' ?' dengan huruf rawak dan '#' dengan nombor rawak . Kita kemudian dapat memeriksa outputnya betul dengan cek Matcher sederhana .

3.2. Nilai semula

Begitu juga, regexify menghasilkan urutan rawak berdasarkan corak regex yang dipilih .

Dalam coretan ini, kami akan menggunakan FakeValueService untuk membuat urutan rawak 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()); }

Kod kami membuat rentetan huruf kecil dengan huruf 10 panjang . Corak kami memeriksa rentetan yang dihasilkan terhadap regex.

4. Kelas Faker JavaFaker

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

Di bahagian ini, kita akan melihat cara membuat 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 Faker Address untuk menghasilkan alamat rawak .

Apabila kita menjalankan kod ini, kita akan mendapat contoh output:

3188 Dayna Mountains New Granvilleborough Tonga

Kami dapat melihat bahawa data tidak memiliki satu lokasi geografi kerana kami tidak menentukan lokasi. Untuk mengubahnya, kami akan belajar menjadikan data lebih relevan dengan lokasi kami di bahagian seterusnya.

Kami juga dapat menggunakan objek palsu ini dengan cara yang sama untuk membuat data yang berkaitan dengan banyak objek seperti:

  • Perniagaan
  • Bir
  • Makanan
  • Nombor telefon

Anda boleh mendapatkan senarai penuh di sini.

5. Memperkenalkan Lokasi

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

@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, kita melihat bahawa kedua-dua Faker dengan bahasa tempatan mencocokkan regex mereka untuk poskod negara.

Sekiranya lokasi yang diteruskan ke Faker tidak ada, Faker membuang LocaleDoesNotExistException .

Kami akan mengujinya dengan ujian unit berikut:

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

6. Keunikan

Walaupun JavaFaker nampaknya menghasilkan data di Random, keunikannya tidak dapat dijamin .

JavaFaker menyokong penyebaran penjana nombor pseudo-rawak (PRNG) dalam bentuk RandomService untuk memberikan output deterministik panggilan kaedah berulang.

Ringkasnya, pseudorandomness adalah proses yang muncul secara rawak tetapi tidak.

Kita dapat melihat bagaimana ini berfungsi dengan membuat dua Faker dengan biji yang sama:

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

Kod di atas mengembalikan nama yang sama dari dua pemalsu yang berbeza.

7. Kesimpulannya

Dalam tutorial ini, kami telah menerokai perpustakaan JavaFaker untuk menghasilkan data palsu yang nyata . Kami juga telah merangkumi dua kelas berguna iaitu kelas Faker dan kelas FakeValueService .

Kami meneroka bagaimana kami dapat menggunakan lokasi untuk menghasilkan data khusus lokasi.

Akhirnya, kami membincangkan bagaimana data yang dihasilkan hanya kelihatan rawak dan keunikan data tidak terjamin.

Seperti biasa, coretan kod boleh didapati di GitHub.