0

Eclipse で JUnitテストを実行すると、nullpointerExceptionが発生します。ここで何が欠けていますか?

メインテスト

public class MainTest {
private Main main;

@Test
    public void testMain() {
        final Main main = new Main();

        main.setStudent("James");

}


@Test
    public void testGetStudent() {
        assertEquals("Test getStudent ", "student", main.getStudent());
    }


@Test
    public void testSetStudent() {
        main.setStudent("newStudent");
        assertEquals("Test setStudent", "newStudent", main.getStudent());
    }

}

セッターとゲッターは Main クラスにあります

主要

public String getStudent() {
        return student;
    }


public void setStudent(final String studentIn) {
        this.student = studentIn;
    }

ありがとう。

4

2 に答える 2

4

メインオブジェクトを使用する前に初期化する必要があります

@Beforeメソッド上または 内のいずれかで実行できますtest itself

オプション1

変化する

@Test
public void testSetStudent() {
    main.setStudent("newStudent");
    assertEquals("Test setStudent", "newStudent", main.getStudent());
}

@Test
public void testSetStudent() {
    main = new Main();
    main.setStudent("newStudent");
    assertEquals("Test setStudent", "newStudent", main.getStudent());
}

オプション 2

@Before メソッドを作成します。@Before を使用すると、@Test が実行される前にメイン フィールドが作成されます。@BeforeClass を使用する別のオプション、オプション 3 があります。

@Before
public void before(){
    main = new Main();
}

オプション 3

@BeforeClass
public static void beforeClass(){
    //Here is not useful to create the main field, here is the moment to initialize
    //another kind of resources.
}
于 2013-10-22T10:58:04.410 に答える
3

すべてのテスト メソッドは、 の新しいインスタンスを取得しますMainTest。これは、最初の方法で行った変更が 2 番目の方法に反映されないことを意味します。ある試験方法と別の試験方法の間に順序関係はありません。

各メソッドを、クラスの動作の 1 つの側面をテストする自己完結型のテストにする必要があります。

于 2013-10-22T11:11:35.853 に答える