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

Vin*_*lam 3 java junit

我有一个扩展junit.framework.TestCase了几种测试方法的测试类。每个方法都打开一个与服务器的HTTP连接并交换请求和响应json字符串。一个方法使用名为UID(类似于sessionId)的字符串获取响应,我需要在后续请求中使用它到服务器。

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

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

我怀疑我的标题是否符合我的要求。请相应地对其进行编辑。

Aar*_*lla 5

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

使用此模式:

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 ...
}
Run Code Online (Sandbox Code Playgroud)

这种方法可以确保login()针对需要它的每个测试调用该方法,并对其进行单独测试,并且可以独立运行每个测试。


Bri*_*new 5

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

有关更多信息,请参见此答案