0

当我在 Eclipse 中运行 junit 测试时,我得到了一个空指针异常。我在这里想念什么?

主测试

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());
    }

}

setter 和 getter 在 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 执行之前创建,还有另一个选项,选项3,使用@BeforeClass

@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. 这意味着您在第一种方法中所做的更改不会出现在第二种方法中,依此类推。一种测试方法与另一种测试方法之间没有顺序关系。

您需要使每个方法成为一个独立的测试,以测试您的类行为的一个方面。

于 2013-10-22T11:11:35.853 回答