Сравнение массивов в утверждениях 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]);


..но есть ли лучший способ?

871   6  

6 ответов:

использовать орг.тесты JUnit.Утверждать's метод assertArrayEquals:

import org.junit.Assert;
...

Assert.assertArrayEquals( expectedResult, result );

Если этот метод недоступен, возможно, вы случайно импортировали класс Assert из junit.framework.

можно использовать Arrays.equals(..):

assertTrue(Arrays.equals(expectedResult, result));

Я предпочитаю конвертировать массивы в строки:

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

    Ничего не найдено.