Pencocok Inti Umum Hamcrest

1. Ikhtisar

Dalam tutorial singkat ini, kita akan menjelajahi kelas CoreMatchers dari framework Hamcrest yang populer untuk menulis kasus uji yang sederhana dan lebih ekspresif.

Idenya adalah membuat pernyataan tegas dibaca seperti bahasa alami.

2. Pengaturan Hamcrest

Kita dapat menggunakan Hamcrest dengan Maven dengan menambahkan dependensi berikut ke file pom.xml kita :

 org.hamcrest java-hamcrest 2.0.0.0 test 

Versi terbaru pustaka ini selalu dapat ditemukan di sini.

3. Pencocokan Inti Umum

3.1. adalah (T) dan (Matcher)

Is (T) mengambil objek sebagai parameter untuk memeriksa kesetaraan dan is (Matcher) menggunakan pencocok lain yang memungkinkan pernyataan kesetaraan menjadi lebih ekspresif.

Kita dapat menggunakan ini dengan hampir semua metode :

String testString = "hamcrest core"; assertThat(testString, is("hamcrest core")); assertThat(testString, is(equalTo("hamcrest core")));

3.2. equalTo (T)

The EqualTo (T) mengambil sebuah objek sebagai parameter dan memeriksa kesetaraan terhadap objek lain. Ini yang sering digunakan dengan adalah (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 bisa menggunakan equalToObject (Object operand) - yang memeriksa kesetaraan dan tidak memaksakan bahwa dua objek harus memiliki tipe statis yang sama:

Object original = 100; assertThat(original, equalToObject(100));

3.3. bukan (T) dan bukan (Matcher)

Not (T) dan not (Matcher) digunakan untuk memeriksa ketidaksamaan objek yang diberikan. Pertama mengambil objek sebagai argumen dan kedua mengambil matcher 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 nilai null terhadap objek yang diperiksa. The nullValue (Kelas) memeriksa nullability dari yang diberikan objek jenis kelas:

Integer nullObject = null; assertThat(nullObject, is(nullValue())); assertThat(nullObject, is(nullValue(Integer.class)));

3.5. notNullValue () dan notNullValue (Class)

Ini adalah jalan pintas yang sering digunakan adalah (bukan (nullValue)) . Ini memeriksa persamaan non-null dari sebuah objek atau dengan tipe kelas:

Integer testNumber = 123; assertThat(testNumber, is(notNullValue())); assertThat(testNumber, is(notNullValue(Integer.class)));

3.6. instanceOf (Kelas)

The instanceOf (Kelas) cocok jika objek diperiksa adalah turunan dari yang ditentukan KelasTipe.

Untuk memverifikasi, metode ini secara internal memanggil isIntance (Object) dari Kelas kelas:

assertThat("instanceOf example", is(instanceOf(String.class)));

3.7. isA (tipe kelas)

The Isa (tipe Class) adalah jalan pintas ke atas instanceOf (Kelas) . Ini mengambil tipe argumen yang sama persis dengan instanceOf (Class) :

assertThat("Drogon is biggest dragon", isA(String.class));

3.8. sameInstance ()

The sameInstance () cocok jika dua variabel referensi menunjuk ke objek yang sama di tumpukan:

String string1 = "Viseron"; String string2 = string1; assertThat(string1, is(sameInstance(string2)));

3.9. apapun (Kelas)

The saja (Kelas) memeriksa apakah kelas adalah dari jenis yang sama seperti objek yang sebenarnya:

assertThat("test string", is(any(String.class))); assertThat("test string", is(any(Object.class)));

3.10. allOf (Matcher…) dan anyOf (Matcher…)

Kita bisa menggunakan allOf (Matcher…) untuk menegaskan jika objek aktual cocok dengan semua kondisi yang ditentukan:

String testString = "Achilles is powerful"; assertThat(testString, allOf(startsWith("Achi"), endsWith("ul"), containsString("Achilles")));

The anyOf (Matcher ...) berperilaku seperti allof (Matcher ...) tapi pertandingan jika objek diperiksa cocok dengan kondisi yang ditentukan:

String testString = "Hector killed Achilles"; assertThat(testString, anyOf(startsWith("Hec"), containsString("baeldung")));

3.11. hasItem (T) dan hasItem (Matcher)

Ini cocok jika koleksi Iterable yang diperiksa cocok dengan objek atau matcher yang diberikan di dalam hasItem () atau hasItem (Matcher) .

Mari kita pahami cara kerjanya:

List list = Lists.newArrayList("java", "spring", "baeldung"); assertThat(list, hasItem("java")); assertThat(list, hasItem(isA(String.class)));

Demikian pula, kita juga bisa menegaskan terhadap 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. keduanya (Matcher) dan (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

Pada artikel ini, kita membahas metode yang berbeda dari CoreMatchers kelas dalam Hamcrest perpustakaan.

Dan, seperti biasa, kode sumber untuk contoh dapat ditemukan di GitHub.