我有一个具有静态和非静态字段的类。我为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的主要要点 - 并行运行测试。
其次,因为它是一个接一个地运行,所以无法帮助我找出是否共享静态字段。
答案 0 :(得分:2)
添加注释不会改变Java的工作方式。 static
字段仍然是静态字段。
这不是并行运行测试,因为它们可能会相互干扰。例如共享资源,如静态字段。
BTW如果你在构造函数中设置一个静态字段,你几乎肯定做错了什么。