Почему для ArrayList появляется ошибка NullPointerException. java, когда мой код не использует ArrayLIst? - PullRequest
0 голосов
/ 04 марта 2020

Итак, у меня есть 2 куска Java кода. Один из них - это небольшой фрагмент исходного кода, а другой - тестовый класс JUnit, с которым я пытаюсь возиться. Однако всякий раз, когда я хочу отладить код, чтобы убедиться, что этот простой код отображается правильно, я получаю исключение NullPointerException при ошибке java .util.ArrayList.forEach (ArrayList. java: 1507).

Вот мой исходный код:

public class sourceCode {
    public int mid(int x, int y, int z) {
        int m = z;

        if (y < z) {
            if (x < y) {
                m = y;
            }
            else if (x < z) {
                m = x;
            }
        }
        else {
            if (x > y) {
                m = y;
            }
            else if (x > z) {
                m = x;
            }
        }
        return m;
    }

}

Вот мой код тестового примера JUnit:

import static org.junit.jupiter.api.Assertions.*;
import org.junit.Before;
import org.junit.jupiter.api.Test;

public class sourceCodeTest {
      public sourceCode sourceCodeVar;

      //Test Fixture
      @Before
      public void setUpBeforeClass() throws Exception {
            sourceCodeVar = new sourceCode();
      }

      @Test
      void test() {
          //Test Oracle
          int oracle = 2;
          //Test Case
          int middleTest1 = sourceCodeVar.mid(1, 2, 3);
          assertEquals(oracle, middleTest1);
      }

}

Выводы

Это оба разных файла в одном каталоге, они также были созданы в Eclipse в проекте. Я видел в другом слегка связанном потоке, что это может быть ошибка, связанная с Eclipse, однако после тестирования его на VS Code появляется та же ошибка, которая указывает на то, что это ошибка с моей стороны.

Полагаю, причина, по которой я так растерялся, заключается в том, что код кажется настолько простым, что я не могу точно определить, где я все испортил.

1 Ответ

2 голосов
/ 04 марта 2020

Кажется, что вы смешиваете JUnit-4 и JUnit-5 в своих тестовых кодах.

import org.junit.Before;            // <- Junit-4 annotation
import org.junit.jupiter.api.Test;  // <- Junit-5 annotation

Как вы используете Junit-5 для теста лучше использовать всю аннотацию Junit-5. Заменить @Before на org.junit.jupiter.api.BeforeEach -> @BeforeEach.

Ваш код должен выглядеть следующим образом:

import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

public class sourceCodeTest {
      public sourceCode sourceCodeVar;

      // change:
      @BeforeEach
      public void setUpBeforeClass() throws Exception {
            sourceCodeVar = new sourceCode();
      }

      @Test
      void test() {
          //Test Oracle
          int oracle = 2;
          //Test Case
          int middleTest1 = sourceCodeVar.mid(1, 2, 3);
          assertEquals(oracle, middleTest1);
      }

}

Для дополнительной информации проверьте ДОКУМЕНТАЦИЯ:

@ BeforeEach

Обозначает, что аннотированный метод должен выполняться перед каждым методом @Test, @RepeatedTest, @ParameterizedTest или @TestFactory в текущем классе; аналогично JUnit 4's @Before. Такие методы наследуются, если они не переопределены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...