当junit本身为每个测试重新初始化类时,为什么要使用@before进行类变量重新启动

时间:2018-01-24 13:02:09

标签: unit-testing testing junit

Junit为每个测试重新初始化类和变量。那么为什么首选在@before带注释的方法中初始化类变量。

1 个答案:

答案 0 :(得分:1)

就像你已经说过的,有两种在JUnit 4中实例化测试类字段的常用方法。只要你不使用@TestInstance(Lifecycle.PER_CLASS),这对JUnit Jupiter仍然有效。)要么人们初始化它们立即

public class SomeTest {
    private final FirstType someFirstType = new FirstType(...);
    private final SecondType someSecondType = new SecondType(...);

    @Test
    public void someTest {

    ...
}

或他们正在使用设置方法

public class SomeTest {
    private FirstType someFirstType;
    private SecondType someSecondType;

    @Before
    public void createObjects() throws Exception {
        someFirstType = new FirstType(...);
        someSecondType = new SecondType(...);
    }

    @Test
    public void someTest {

    ...
}

最后,两种样式都会产生相同的结果:每个测试都使用自己的someFirstTypesomeSecondType实例运行。然而,这两种风格都有独特的优势

立即初始化

  • 字段的初始化接近其声明。 (提高了可读性,因为读者不必找到初始化代码。)
  • 字段可能是最终字段,因此很明显它们不会被重新分配。

设置方法

  • 字段可以由抛出已检查异常的构造函数初始化。
  • 您可以运行用于计算以后用于调用构造函数的对象的代码。 E.g。

    @Before
    public void createObjects() throws Exception {
        int[] someNumbers = new int[10];
        for (int i = 0; i < someNumbers.length; ++i) {
            someNumbers[i] = i*i;
        }
        someFirstType = new FirstType(someNumbers);
    }