Java 如何在JUnit测试之间共享状态?

Java 如何在JUnit测试之间共享状态?,java,junit,Java,Junit,我有一个扩展了junit.framework.TestCase的测试类,其中有几个测试方法。每个方法都会打开到服务器的HTTP连接以及exchange请求和响应json字符串。有一个方法会得到一个名为UID的字符串(类似于sessionId)的响应,我需要在对服务器的后续请求中使用该字符串 我之前将该字符串写入一个文件,下一个请求读取该文件中的字符串。我一次运行一个方法。现在我尝试在没有文件操作的情况下使用该字符串。为此,我在测试类中维护了一个hastable(因为有许多UID要跟踪),作为实例

我有一个扩展了junit.framework.TestCase的测试类,其中有几个测试方法。每个方法都会打开到服务器的HTTP连接以及exchange请求和响应json字符串。有一个方法会得到一个名为UID的字符串(类似于sessionId)的响应,我需要在对服务器的后续请求中使用该字符串

我之前将该字符串写入一个文件,下一个请求读取该文件中的字符串。我一次运行一个方法。现在我尝试在没有文件操作的情况下使用该字符串。为此,我在测试类中维护了一个hastable(因为有许多UID要跟踪),作为实例变量,但最终发现,每次调用方法时都会加载类,因为每次静态块都在执行。这导致了UID的丢失

我如何在不写入文件和读取文件的情况下实现这一点


我怀疑我的标题是否符合我的要求。请有人相应地编辑它。

你需要一个静态变量,因为每个测试都有自己的测试类实例

使用此模式:

private static String uuid;

private void login() {
    // Run this only once
    if (null != uuid) return;

    ... talk to your server ...
    uuid = responseFromServer.getUuid();
}

@Test
public void testLogin() {
    login();
    assertNotNull( uuid );
}

@Test
public void someOtherTest() {
    login();

    ... test something else which needs uuid ...
}

@Test
public void testWithoutLogin() {
    ... usual test code ...
}

这种方法确保为每个需要它的测试调用
login()
,它是独立测试的,并且您可以独立运行每个测试。

JUnit将为每个测试创建一个新的类实例。因此,您可能应该使用带注释的静态方法将此信息设置为静态并存储到类中

有关更多信息,请参阅