Tôi đang sử dụng tính năng "parametrized" của junit 4 và tôi nhận thấy rằng phương thức @parameters được thực thi trước phương thức @beforeclass. Điều này tạo ra một vấn đề đối với tôi bởi vì các tham số tôi đang chuyển sang các trường hợp thử nghiệm thông qua @parameters phụ thuộc vào mã khởi tạo trong phương thức @beforeclass. Ví dụ@parameters được thực hiện trước phương thức @beforeclass
@RunWith(Parameterized.class)
public class TestOtherClass {
String argument;
private static boolean initializeThis;
public TestOtherClass(String parameter) throws Exception {
argument=parameter;
}
@BeforeClass
public static void doSetup() {
System.out.println("Doing setup before class...");
initializeThis=true; // true or false, based on some condition
}
@Test
public void otherTest() {
System.out.println("Other test: " + argument);
}
@Parameters
public static Collection<Object[]> getData(){
System.out.println("Inside parameter");
String addThis;
if(initializeThis)
addThis="adding true";
else
addThis="adding false";
Object[] para1 = new Object[]{"First parameter :: " + addThis};
Object[] para2 = new Object[]{"Second parameter :: " + addThis};
Collection<Object[]> classNames = new ArrayList<Object[]>();
classNames.add(para1);
classNames.add(para2);
return classNames;
}
}
Bây giờ, tôi đang khởi tạo biến "initializeThis" true trong phương pháp @beforeclass nhưng (ngạc nhiên) khi tôi thực hiện các trường hợp thử nghiệm nó in
Other test: First parameter :: adding false
Other test: Second parameter :: adding false
Đó là một cái gì đó không mong đợi.
Câu hỏi của tôi là; có cách nào để thực thi phương thức @beforeclass trước @parameters, chúng ta có thể thực hiện điều này trong junit 4 không?
có thể chuyển chức năng của nhà cung cấp cho các tham số có thể truy xuất trường sau – Kirby