Сравнение массивов в утверждениях JUnit, краткий встроенный способ?
есть ли краткий, встроенный способ сделать равные утверждения на двух подобных типизированных массивах в 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]);
..но есть ли лучший способ?
6 ответов:
использовать орг.тесты JUnit.Утверждать's метод
assertArrayEquals:import org.junit.Assert; ... Assert.assertArrayEquals( expectedResult, result );Если этот метод недоступен, возможно, вы случайно импортировали класс Assert из
junit.framework.
Я предпочитаю конвертировать массивы в строки:
Assert.assertEquals( Arrays.toString(values), Arrays.toString(new int[] { 7, 8, 9, 3 }));таким образом, я могу ясно видеть, где неправильные значения. Это эффективно работает только для небольших массивов, но я редко использую массивы с более чем 7 элементами в своих модульных тестах.
этот метод работает для примитивных типов и для других типов при перегрузке
toStringвозвращает всю необходимую информацию.
Я знаю, что вопрос для JUnit4, но если вы застряли в JUnit3, вы можете создать короткую функцию полезности:
private void assertArrayEquals(Object[] esperado, Object[] real) { assertEquals(Arrays.asList(esperado), Arrays.asList(real)); }в JUnit3 это лучше, чем прямое сравнение массивов, так как он будет подробно описывать, какие именно элементы отличаются.
С помощью junit4 и Hamcrest вы получаете краткий метод сравнения массивов. Он также дает подробную информацию о том, где ошибка находится в трассировке сбоя.
import static org.junit.Assert.* import static org.hamcrest.CoreMatchers.*; //... assertThat(result, is(new int[] {56, 100, 2000}));выход трассировки сбоя:
java.lang.AssertionError: Expected: is [<56>, <100>, <2000>] but: was [<55>, <100>, <2000>]
Comments