在Junit中使用beforeclass中的参数

时间:2014-01-14 21:19:16

标签: class selenium junit parameterized

我要做的是读取参数化值并在前一类中使用它们来为bowser设置webdriver,如参数所示,在浏览器中运行测试。然后获取下一个浏览器并在该浏览器中运行测试,依此类推所有其他指定的浏览器。但是我在前面的parmeter中得到了空值。你能在Junit中做到这一点,还是有其他方法可以做到这一点?

由于

@RunWith(value = Parameterized.class)
public class MultiBrowser {

private static WebDriver driver;
private static  String browser;
//private static Dimension device;
private static String testData = "Testing";
private static String device;

@Parameters
public static Collection< Object[]> data() {
    System.out.println("Inside parameter");
    return Arrays.asList(new Object[][]{{"Firefox", "IPHONE4"},{"Chrome", "IPAD"},{"Ie", "SamsungGalaxy"}});
}

public MultiBrowser(String browser, String device){
    System.out.println("Inside MultiBrowser = "+ browser+" " + device);
    this.browser=browser;
    this.device=device;
}

@BeforeClass
public static void  dosetUp() throws Exception {
    System.out.println("Doing setup before class..." + browser + device);
 }

1 个答案:

答案 0 :(得分:1)

您在这里使用的技术不起作用。 @Parameters是通过构造函数注入的,但是在调用任何构造函数之前会调用静态@BeforeClass方法,因此这些静态字段将为null

您的问题与Creating a JUnit testsuite with multiple instances of a Parameterized testParameterized suites in Junit 4?非常相似;这两个答案都表明TestNG是一个能够做到这一点的框架。

在JUnit中,您可以使用 How do I Dynamically create a Test Suite in JUnit 4? 建议的技术动态构建测试套件,并在不使用@Parameters的情况下完成。

或者,对于更简单但效率更低的解决方案,请将您的设置代码移动到非静态@Before方法中,并接受它将在每次测试之前运行。