У меня есть класс, который имеет статические и нестатические поля. Я параметризую этот класс для тестов JUnit. Теперь у меня есть сомнения, разделены ли статические поля между тестами или нет. Если @Parameterized annotation помогает только создать много экземпляров одного и того же класса, то я считаю, что статические поля распределяются между тестами, но если он создает разные классы (например, с добавлением некоторого суффикса к имени класса в фоновом режиме), то каждый класс будет иметь его собственные статические поля. я попытался проверить его с этим кодом, но без успеха:Является статическим полем класса, разделяемым между тестами, когда параметр параметризуется?
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