我有一個有靜態和非靜態字段的類。我將這個類參數化爲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