【问题标题】:Use parameters in beforeclass in Junit在Junit的beforeclass中使用参数
【发布时间】:2014-01-14 21:19:15
【问题描述】:

我要做的是读取参数化值并在之前的类中使用它们为参数指定的 Bowser 设置 webdriver,在浏览器中运行测试。然后获取下一个浏览器并在该浏览器中运行测试,以此类推所有其他指定的浏览器。但是我在参数的前一个类中得到了空值。您可以在 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);
 }

【问题讨论】:

    标签: class selenium junit parameterized


    【解决方案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 方法中,并接受它将在每次测试之前运行。

    【讨论】:

    • 我遇到了与 PO 相同的问题,但是当我在 (A)BeforeClass 和 (A)Parameters 方法中设置调试点时,(A)Parameters 在 (A) 之前被调用)第一课前。
    猜你喜欢
    • 2014-03-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 2010-12-27
    • 1970-01-01
    • 2012-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多