JUnit中的@Before注释是否自动调用方法?

时间:2018-04-11 09:07:25

标签: java junit annotations

我在JUnit中进行了以下测试:

 @Test
 public void getLargestCustId_should_return_five(){
     Assert.assertEquals(5, project.getLargestCustId());
 }

但是,它会抛出NullPointerException,因为项目对象未初始化。尽管事实上我已经使用@Before注释创建了一个init方法:

@Before
public void init(){
    project = new Project();

    personOne = new Person(-3);
    personTwo = new Person(1);
    personThree = new Person(5);

    project.addPerson(personOne);
    project.addPerson(personTwo);
    project.addPerson(personThree);
}

当我将整个代码移动到getLargestCustId_should_return_five()时,它可以工作,并且Project-class被正确初始化。

我认为@ Before-annotation确保自动调用init()方法?没有我必须在其他方法中调用this.init()。它是否正确?或者我必须在类运行时显式调用该方法?

1 个答案:

答案 0 :(得分:-1)

来自JavaDoc

  • 在编写测试时,通常会发现几个测试需要类似的
  • 在可以运行之前创建的对象。注释public void方法
  • 使用@Before
  • 会导致该方法在 @Test 方法之前运行。
  • 超类的@Before方法将在当前类的方法之前运行,
  • 除非在当前班级中被覆盖。没有定义其他排序。