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

Java 有没有办法在另一个方法中使用实例变量?,java,junit,instance-variables,Java,Junit,Instance Variables,假设我有一个定义变量并为其赋值的方法。我希望能够在另一个方法中使用该变量及其值 我不想将变量作为参数传递,因为我正在运行一个selenium测试,并且有多个测试方法依赖于该方法-这意味着它将仅在执行其中一个测试方法(依赖于它)时执行 我曾尝试使用访问器/变异器将id分配给类变量,但似乎不起作用 e、 g 为了在@Test方法之间共享逻辑/变量,您可以使用在@Test方法之前使用@BeforeClass注释的实例方法,该方法将在每个@Test方法之前调用一次,也可以使用在@BeforeClass注

假设我有一个定义变量并为其赋值的方法。我希望能够在另一个方法中使用该变量及其值

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

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

e、 g


为了在
@Test
方法之间共享逻辑/变量,您可以使用在
@Test
方法之前使用
@BeforeClass
注释的实例方法,该方法将在每个
@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...

请注意,将
mainId
doSomething
逻辑更改为静态需要将
randomNumeric
方法也更改为静态。

这是因为JUnit为每个测试(方法)创建了一个新的测试类实例。不确定这里的最佳实践是什么,但您是否尝试过使用静态变量来代替?您可能应该在一个预先测试方法中进行常规设置(如确定
mainId
值),该方法在
@之前进行注释。静态不起作用,并且当我调试…sendKeys(this.getID())部分时,如果
mainId
变为静态,它将返回null,那么您将无法使用
实例访问它。静态成员属于该类,而不是该类的任何特定实例。因此,可以通过内部类代码中的
MyClassName.mainId
mainId
访问它。
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...