当我在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;
}
感谢。
答案 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
的新实例。这意味着您在第一种方法中所做的更改不会显示在第二种方法中,依此类推。一种测试方法与另一种测试方法之间没有顺序关系。
你需要让每个方法都是一个独立的测试,测试你班级行为的一个方面。