1. Gambaran keseluruhan
Dalam tutorial ringkas ini, kita akan meneroka kelas CoreMatchers dari kerangka Hamcrest yang popular untuk menulis kes ujian yang mudah dan lebih ekspresif.
Ideanya ialah membuat pernyataan tegas dibaca seperti bahasa semula jadi.
2. Persediaan Hamcrest
Kita boleh menggunakan Hamcrest with Maven dengan menambahkan kebergantungan berikut ke fail pom.xml kami :
org.hamcrest java-hamcrest 2.0.0.0 test
Versi terbaru perpustakaan ini selalu terdapat di sini.
3. Pemadan Teras Biasa
3.1. adalah (T) dan (Pencocok)
Is (T) mengambil objek sebagai parameter untuk memeriksa kesamaan dan (Matcher) mengambil pencocokan lain yang membolehkan penyataan persamaan lebih ekspresif.
Kita boleh menggunakannya dengan hampir semua kaedah :
String testString = "hamcrest core"; assertThat(testString, is("hamcrest core")); assertThat(testString, is(equalTo("hamcrest core")));
3.2. sama dengan (T)
The equalTo (T) mengambil objek sebagai parameter dan memeriksa kesaksamaan terhadap objek lain. Ini sering digunakan dengan (Matcher) :
String actualString = "equalTo match"; List actualList = Lists.newArrayList("equalTo", "match"); assertThat(actualString, is(equalTo("equalTo match"))); assertThat(actualList, is(equalTo(Lists.newArrayList("equalTo", "match"))));
Kita juga boleh menggunakan equalToObject (Objek operan) - yang memeriksa kesamaan dan tidak menegaskan bahawa dua objek harus jenis statik yang sama:
Object original = 100; assertThat(original, equalToObject(100));
3.3. bukan (T) dan tidak (Matcher)
Not (T) dan not (Matcher) digunakan untuk memeriksa ketidaksamaan objek yang diberikan. Pertama mengambil objek sebagai argumen dan kedua mengambil pencocokan lain:
String testString = "troy kingdom"; assertThat(testString, not("german kingdom")); assertThat(testString, is(not(equalTo("german kingdom")))); assertThat(testString, is(not(instanceOf(Integer.class))));
3.4. nullValue () dan nullValue (Kelas)
The nullValue () memeriksa null nilai terhadap objek yang diperiksa itu. The nullValue (Class) cek nullability untuk diberikan jenis kelas objek:
Integer nullObject = null; assertThat(nullObject, is(nullValue())); assertThat(nullObject, is(nullValue(Integer.class)));
3.5. notNullValue () dan notNullValue (Kelas)
Ini adalah jalan pintas yang sering digunakan adalah (bukan (nullValue)) . Ini memeriksa kesetaraan objek-nol atau dengan jenis kelas:
Integer testNumber = 123; assertThat(testNumber, is(notNullValue())); assertThat(testNumber, is(notNullValue(Integer.class)));
3.6. instanceOf (Kelas)
The instanceOf (Class) perlawanan jika objek yang diperiksa adalah contoh yang dinyatakan Kelasmenaip.
Untuk mengesahkan, kaedah ini secara dalaman memanggil isIntance (Objek) untuk Kelas kelas:
assertThat("instanceOf example", is(instanceOf(String.class)));
3.7. isA (Jenis kelas)
The ISA (jenis Class) adalah jalan pintas untuk di atas instanceOf (Class) . Ia memerlukan jenis argumen yang sama seperti instanceOf (Class) :
assertThat("Drogon is biggest dragon", isA(String.class));
3.8. Perkara yang sama ()
The sameInstance () perlawanan jika dua rujukan pembolehubah menunjukkan objek yang sama dalam satu longgokan:
String string1 = "Viseron"; String string2 = string1; assertThat(string1, is(sameInstance(string2)));
3.9. mana-mana (Kelas)
Mana - mana (Kelas) memeriksa sama ada kelas itu sama dengan objek sebenar:
assertThat("test string", is(any(String.class))); assertThat("test string", is(any(Object.class)));
3.10. allOf (Matcher…) dan anyOf (Matcher…)
Kita boleh menggunakan allOf (Matcher…) untuk menyatakan jika objek sebenar sesuai dengan semua syarat yang ditentukan:
String testString = "Achilles is powerful"; assertThat(testString, allOf(startsWith("Achi"), endsWith("ul"), containsString("Achilles")));
The anyOf (Matcher ...) berkelakuan seperti allOf (Matcher ...) tetapi perlawanan jika objek yang diperiksa perlawanan mana-mana syarat yang dinyatakan:
String testString = "Hector killed Achilles"; assertThat(testString, anyOf(startsWith("Hec"), containsString("baeldung")));
3.11. hasItem (T) dan hasItem (Matcher)
Ini sesuai jika koleksi Iterable yang diperiksa sesuai dengan objek atau pencocokan dalam hasItem () atau hasItem (Matcher) .
Mari fahami bagaimana ini berfungsi:
List list = Lists.newArrayList("java", "spring", "baeldung"); assertThat(list, hasItem("java")); assertThat(list, hasItem(isA(String.class)));
Begitu juga, kita juga boleh menegaskan lebih dari satu item menggunakan hasItems (T…) dan hasItems (Matcher…) :
List list = Lists.newArrayList("java", "spring", "baeldung"); assertThat(list, hasItems("java", "baeldung")); assertThat(list, hasItems(isA(String.class), endsWith("ing")));
3.12. kedua-duanya (Matcher) dan sama ada (Matcher)
As the name suggests, the both(Matcher) matches when both of the specified conditions match the examined object:
String testString = "daenerys targaryen"; assertThat(testString, both(startsWith("daene")).and(containsString("yen")));
and either(Matcher)matches when either of the specified conditions matches the examined object:
String testString = "daenerys targaryen"; assertThat(testString, either(startsWith("tar")).or(containsString("targaryen")));
4. String Comparison
We can use containsString(String) or containsStringIgnoringCase(String) to assert if the actual string contains test string:
String testString = "Rhaegar Targaryen"; assertThat(testString, containsString("aegar")); assertThat(testString, containsStringIgnoringCase("AEGAR"));
Or startsWith(String) and startsWithIgnoringCase(String) to assert if the actual string starts with test string:
assertThat(testString, startsWith("Rhae")); assertThat(testString, startsWithIgnoringCase("rhae"));
We can also use endsWith(String) or endsWithIgnoringCase(String) to assert if the actual string ends with test string:
assertThat(testString, endsWith("aryen")); assertThat(testString, endsWithIgnoringCase("ARYEN"));
5. Conclusion
Dalam artikel ini, kita membincangkan kaedah yang berbeza CoreMatchers kelas dalam Hamcrest perpustakaan.
Dan, seperti biasa, kod sumber untuk contoh boleh didapati di GitHub.