Apakah ada cara ringkas dan built-in untuk melakukan pernyataan yang setara pada dua array yang diketik seperti di JUnit? Secara default (setidaknya dalam JUnit 4) tampaknya melakukan perbandingan contoh pada objek array itu sendiri.
EG, tidak berfungsi:
int[] expectedResult = new int[] { 116800, 116800 };
int[] result = new GraphixMask().sortedAreas(rectangles);
assertEquals(expectedResult, result);
Tentu saja, saya bisa melakukannya secara manual dengan:
assertEquals(expectedResult.length, result.length);
for (int i = 0; i < expectedResult.length; i++)
assertEquals("mismatch at " + i, expectedResult[i], result[i]);
..tapi apakah ada cara yang lebih baik?
java
arrays
junit
assertions
mBria
sumber
sumber
java.lang.AssertionError: array lengths differed, expected.length=6 actual.length=7
. Seperti kebanyakan pesan kegagalan JUnit, itu tidak begitu membantu ... Saya menyarankan menggunakan beberapa kerangka kerja penegasanAssert.assertFalse( Arrays.equals( expectedResult, result ))
.Anda bisa menggunakan
Arrays.equals(..)
:sumber
Saya lebih suka mengonversi array ke string:
dengan cara ini saya bisa melihat dengan jelas di mana nilai-nilai yang salah. Ini bekerja secara efektif hanya untuk array berukuran kecil, tetapi saya jarang menggunakan array dengan lebih banyak item daripada 7 dalam tes unit saya.
Metode ini berfungsi untuk tipe primitif dan untuk tipe lainnya ketika kelebihan
toString
pengembalian semua informasi penting.sumber
Assert.assertArrayEquals("message", expectedResult, result)
sumber
Menggunakan junit4 dan Hamcrest Anda mendapatkan metode ringkas untuk membandingkan array. Itu juga memberikan rincian di mana kesalahan berada di jejak kegagalan.
Output Jejak Kegagalan:
sumber
Saya tahu pertanyaannya adalah untuk JUnit4, tetapi jika Anda terjebak di JUnit3, Anda dapat membuat fungsi utilitas pendek seperti itu:
Dalam JUnit3, ini lebih baik daripada langsung membandingkan array, karena akan merinci elemen mana yang berbeda.
sumber