有没有办法在另一个方法中使用实例变量?

时间:2014-06-17 22:35:57

标签: java junit instance-variables

让我们说我有一个方法来定义和赋值给变量。我想以某种方式能够在另一个方法中使用该变量及其值。

我不想将变量作为参数传递,因为我正在运行selenium测试,并且有多个测试方法依赖于那个方法 - 这意味着它只会在其中一个测试方法中执行(这取决于它)被执行。

我尝试使用访问器/ mutators将id分配给类变量,但它似乎不起作用

e.g

String mainId;

public void setID(String s) {
    mainId = s;
}

public String getID() {
    return mainId;
}  

@Test
public void doSomething() {
    String numeric = this.randomNumeric();
    String id = "D1234" + numeric;
    this.setID(id);

    ... // do something with that id number
}

@Test (dependsOnMethod = {"doSomething"})
public void somethingA() {
    ...sendKeys(this.getID()); // do something with that id - e.g search the database to see if that id was added correctly
}

@Test (dependsOnMethod = {"doSomething"})
public void somethingB() {
    ... // do something else with that id
}

1 个答案:

答案 0 :(得分:2)

为了在@Test方法之间共享逻辑/变量,您可以使用注释为@Before的实例方法,该方法将在每个@Test方法之前调用一次,或者使用静态方法注释使用@BeforeClass,在任何@Test方法运行之前,它将仅对整个测试类调用一次。

在您的方案中,假设您需要生成一次mainId值并在多个@Test方法中重复使用相同的值,则需要使用@BeforeClass并将值存储为静态变量,如下所示:

private static String mainId;

@BeforeClass
public static void init() { //must be public static void
    String numeric = randomNumeric();
    mainId = "D1234" + numeric;
}

@Test
public void somethingA() {
    //use mainId (note that it belongs to class, not this instance)
    //...
}

//other tests...

请注意,将mainIddoSomething逻辑更改为静态时,您需要将randomNumeric方法更改为静态。