Подтвердить что ты не робот

Использование assertArrayEquals в модульных тестах

Я намерен использовать метод assertArrayEquals(int[], int[]) JUnit, описанный в API для проверки одного метода в моем классе.

Но Eclipse показывает мне сообщение об ошибке, что он не может распознать такой метод. Эти два импорта находятся на месте:

import java.util.Arrays;
import junit.framework.TestCase;

Я что-то пропустил?

4b9b3361

Ответ 1

Это должно работать с JUnit 4:

import static org.junit.Assert.*;
import org.junit.Test;

public class JUnitTest {

    /** Have JUnit run this test() method. */
    @Test
    public void test() throws Exception {

        assertArrayEquals(new int[]{1,2,3},new int[]{1,2,3});

    }
}

(ответ основан на этой статье wiki)


И это то же самое для старой структуры JUnit (JUnit 3):

import junit.framework.TestCase;

public class JUnitTest extends TestCase {
  public void test() {
    assertArrayEquals(new int[]{1,2,3},new int[]{1,2,3});
  }
}

Обратите внимание на разницу: никакие аннотации и тестовый класс не являются подклассом TestCase (который реализует статические методы assert).

Ответ 2

Это может быть полезно, если вы хотите использовать только assertEquals, в зависимости от вашей версии Junit

assertTrue(Arrays.equals(expected, actual));

Ответ 3

Попробуйте добавить:

import static org.junit.Assert.*;

assertArrayEquals является статическим методом.

Ответ 4

Если вы пишете тесты стиля JUnit 3.x, которые расширяют TestCase, вам не нужно использовать квалификатор Assert - TestCase расширяет Assert и поэтому эти методы доступны без квалификатора.

Если вы используете аннотации JUnit 4, избегая базового класса TestCase, тогда нужен определитель Assert, а также import org.junit.Assert. Вы можете использовать статический импорт, чтобы избежать определения в этих случаях, но некоторые считают слабым стилем некоторыми.