私のコードは、ArrayListのを使用していないのに、なぜNullPointerExceptionエラーがArrayList.javaのために表示されていますか?

gotj:

私は、Javaコードの2枚を持っているので。一つは、ソースコードのシンプルで小さなピースであり、他は、私は周りの混乱にしようとしていることをJUnitテストクラスです。私はこの単純なコードが正しく表示されていることを確認するために、コードをデバッグしたいときしかし、私はjava.util.ArrayList.forEach(ArrayList.java:1507)エラーでNullPointerExceptionが得られます。

ここに私のソースコードは次のとおりです。

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で作成された、同じディレクトリの下の両方の異なるファイルです。私はそれがしかしVSコード、それは私の一部に誤りだということを示しているのと同じエラーが表示さでそれをテストする際のEclipseに関連するバグを得ることを別の少しの関連スレッドで見ました。

私は私がそのように混乱している理由は、コードは、私が台無しにどこ私は正確に特定することができないという単純なようであるように思わということですね。

ruhul:

あなたが両方の混合されているように見えるのJUnit-4JUnitの-5をテストコードで。

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

もしあなたが使用しているとしてJunit-5、テストのために、より良いのすべての使用Junit-5注釈を。交換する@Beforeorg.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の@Beforeに類似。彼らは上書きされない限り、このような方法は、継承されています。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=23448&siteId=1