在参数化类时,是否在测试之间共享类的静态字段?

时间:2017-02-16 08:47:19

标签: java junit static parameterized

我有一个具有静态和非静态字段的类。我为JUnit测试参数化了这个类。 现在我怀疑是否在测试之间共享静态字段。如果@Parameterized注释只能帮助创建同一个类的许多实例,那么我相信静态字段在测试之间共享,但是如果它创建了不同的类(例如,在后台为类名添加一些后缀)那么每个类都会有它自己的静态字段。 我尝试用这段代码测试它,但没有成功:

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;

import java.util.Arrays;
import java.util.List;

@RunWith(Parameterized.class)
public class Parametrized {
   public static String field1;
   public String field2;
   public int slp;

   public Parametrized (String str1, String str2, int slp) {
    this.field1 = str1;
    this.field2 = str2;
    this.slp = slp;
   }

   @Parameterized.Parameters ()
   public static List<Object[]> data() {
    return Arrays.asList( new Object[][] {{"1_static", "1_nonstatic", 5000}, {"2_static", "2_nonstatic", 2000}});
   }

   @Test
   public void test_static() throws InterruptedException {
    System.out.println(field1);
    Thread.sleep(this.slp);
    System.out.println(field2);
    System.out.println(field1);
   }
}

首先,我注意到测试不是并行运行,而是一个接一个地运行:我认为这是使用@Parameterized的主要要点 - 并行运行测试。

其次,因为它是一个接一个地运行,所以无法帮助我找出是否共享静态字段。

1 个答案:

答案 0 :(得分:2)

添加注释不会改变Java的工作方式。 static字段仍然是静态字段。

这不是并行运行测试,因为它们可能会相互干扰。例如共享资源,如静态字段。

BTW如果你在构造函数中设置一个静态字段,你几乎肯定做错了什么。