Bagaimana Anda secara ringkas menegaskan persamaan Collection
elemen, khususnya a Set
di JUnit 4?
java
unit-testing
collections
junit
Eqbal
sumber
sumber
Jawaban:
Anda dapat menyatakan bahwa keduanya
Set
sama satu sama lain, yang memanggilSet
equals()
metode tersebut .Ini
@Test
akan lolos jika keduanyaSet
berukuran sama dan mengandung elemen yang sama.sumber
equals
danhashCode
menerapkan di kelas yang Anda simpan di Hashtable Anda?Apache bersiap untuk menyelamatkan lagi.
Bekerja seperti pesona. Saya tidak tahu mengapa tetapi saya menemukan bahwa dengan koleksi berikut
assertEquals(coll1, coll2)
ini tidak selalu berfungsi. Dalam kasus di mana gagal untuk saya, saya memiliki dua koleksi yang didukung oleh Sets. Baik hamcrest maupun junit tidak akan mengatakan bahwa koleksinya sama meskipun saya tahu pasti itu sama. Menggunakan CollectionUtils bekerja dengan sempurna.sumber
dengan hamcrest :
dengan pernyataan sederhana:
NB: t metode equals () dari kelas himpunan beton digunakan
sumber
Kasus yang sangat menarik adalah saat Anda membandingkan
dan
Sejauh ini, satu-satunya solusi yang saya lihat adalah mengubah keduanya menjadi set
Atau saya bisa membandingkannya elemen demi elemen.
sumber
Sebagai metode tambahan yang berbasis array ... Anda dapat mempertimbangkan untuk menggunakan pernyataan array tak berurutan di junitx. Meskipun contoh Apache CollectionUtils akan berfungsi, ada juga paket ekstensi pernyataan yang solid di sana:
Saya pikir itu
pendekatan akan jauh lebih mudah dibaca dan di-debug untuk Anda (semua Koleksi mendukung toArray (), jadi seharusnya cukup mudah untuk menggunakan metode ArrayAssert.
Tentu saja kekurangannya di sini adalah, junitx adalah file jar tambahan atau entri maven ...
sumber
Lihat artikel ini . Satu contoh dari sana:
sumber
Menggunakan Hamcrest:
Ini juga berfungsi ketika set memiliki tipe data yang berbeda, dan melaporkan perbedaannya, bukan hanya gagal.
sumber
Jika Anda ingin memeriksa apakah Daftar atau Kumpulan berisi sekumpulan nilai tertentu (alih-alih membandingkannya dengan koleksi yang sudah ada), seringkali metode koleksi toString berguna:
Ini sedikit lebih pendek daripada membuat koleksi yang diharapkan dan membandingkannya dengan koleksi sebenarnya, dan lebih mudah untuk menulis dan mengoreksi.
(Memang, ini bukan metode yang sangat bersih, dan tidak dapat membedakan elemen "foo, bar" dari dua elemen "foo" dan "bar". Namun dalam praktiknya, menurut saya yang paling penting adalah menulis tes yang mudah dan cepat , jika tidak, banyak pengembang tidak mau tanpa dipaksa.)
sumber
Saya suka solusi dari Hans-Peter Störr ... Tapi menurut saya itu tidak sepenuhnya benar. Sayangnya
containsInAnyOrder
tidak menerimaCollection
keberatan untuk dibandingkan. Jadi itu harusCollection
dariMatcher
s:Impornya adalah:
sumber