首页 > 解决方案 > JUnit 在没有@BeforeEach 的情况下创建一个新的类实例?

问题描述

为了重构测试,我们被告知 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 相同的目的?

标签: javatestingjunit

解决方案


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

看看这个例子:

public class SampleTest {

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

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

运行它,你会看到测试类实例在 and 中是不同的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 

   }
}

推荐阅读