我有一个有静态和非静态字段的类。我将这个类参数化为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的要点 - 并行运行测试。
其次,因为它是一个接一个地运行它并没有帮助我找出静态字段是否共享。
如果使用Maven的SureFire插件运行测试,它的工作原理也不清楚 - 它是否会在后台创建参数化类的不同副本,每个副本都有自己的静态对象? – user6419217