Есть ли в JUnit краткий, встроенный способ сделать утверждения равенства для двух массивов одинакового типа? По умолчанию (по крайней мере, в JUnit 4) кажется, что выполняется сравнение экземпляров самого объекта массива.
Например, не работает:
int[] expectedResult = new int[] { 116800, 116800 };
int[] result = new GraphixMask().sortedAreas(rectangles);
assertEquals(expectedResult, result);
Конечно, я могу сделать это вручную с помощью:
assertEquals(expectedResult.length, result.length);
for (int i = 0; i < expectedResult.length; i++)
assertEquals("mismatch at " + i, expectedResult[i], result[i]);
..но есть ли лучший способ?
java
arrays
junit
assertions
mBria
источник
источник
java.lang.AssertionError: array lengths differed, expected.length=6 actual.length=7
. Как и большинство сообщений о сбоях JUnit, это не так полезно ... Я советую использовать некоторую платформу утвержденийAssert.assertFalse( Arrays.equals( expectedResult, result ))
.Вы можете использовать
Arrays.equals(..)
:источник
Я предпочитаю конвертировать массивы в строки:
таким образом я могу ясно видеть, где находятся неправильные значения. Это эффективно работает только для небольших массивов, но я редко использую массивы с количеством элементов больше 7 в своих модульных тестах.
Этот метод работает для примитивных типов и для других типов, когда перегрузка
toString
возвращает всю важную информацию.источник
Assert.assertArrayEquals("message", expectedResult, result)
источник
Используя junit4 и Hamcrest, вы получаете краткий метод сравнения массивов. Это также дает подробную информацию о том, где находится ошибка в трассировке отказа.
Выход трассировки сбоя:
источник
Я знаю, что вопрос касается JUnit4, но если вы застряли в JUnit3, вы можете создать короткую служебную функцию, например:
В JUnit3 это лучше, чем прямое сравнение массивов, поскольку в нем будет подробно указано, какие элементы отличаются.
источник