JUnit在没有@BeforeEach的情况下创建了该类的新实例?

时间:2020-05-25 07:19:30

标签: java testing junit

为了重构测试,我们被告知JUnit每次都会通过执行以下操作来创建该类的新实例:

public class someClassTest{

  final private someClass obj1 = new someClass();

  @Test
  public void t1() {
      Assertions.assertEquals(1, obj1.returnOne());
  }

  @Test
  public void t2() {
      Assertions.assertEquals(8, obj1.return(2));
  }
}

而不是使用类似的

@BeforeEach
void setup(){
someClass obj1 = new someClass();}

或每次在测试方法中对其进行初始化。

我的问题是,为什么我的第一段代码如何以及如何实现与@BeforeEach相同的目的?

1 个答案:

答案 0 :(得分:2)

JUnit框架对此进行管理。它在每次测试之前创建测试类(someClassTest)的新实例。

看看这个例子:

public class SampleTest {

    @Test
    public void test1() {
        System.out.println(this.toString());
    }

    @Test
    public void test2() {
        System.out.println(this.toString());
    }
}

运行它,您会发现测试类实例在test1test2中有所不同,例如:

SampleTest@4e515669
SampleTest@504bae78

从那时起,这只是Java的普通行为。 如果对象中有字段,则将重新创建(并重新初始化):

public class SampleTest {
   private int i = 0;

   @Test
   public void test1() {
      // i is 0, so lets increase and see what happens in test2
      i++;
   }
   @Test
   public void test2() {
     // here i is again 0 because it was re-created, we have a different object of SampleTest 

   }
}
相关问题