对setter和getter失败的JUnit测试

时间:2013-10-22 10:56:00

标签: java eclipse unit-testing junit junit4

当我在eclipse中运行junit测试时,我得到了一个 nullpointerexception 。我在这里失踪了什么?

MainTest

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

感谢。

2 个答案:

答案 0 :(得分: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.
}

答案 1 :(得分:3)

每个测试方法都会获得MainTest的新实例。这意味着您在第一种方法中所做的更改不会显示在第二种方法中,依此类推。一种测试方法与另一种测试方法之间没有顺序关系。

你需要让每个方法都是一个独立的测试,测试你班级行为的一个方面。