5

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

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

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

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

4

2 回答 2

7

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

使用此模式:

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()为每个需要它的测试调用它,它是独立测试的,并且您可以独立运行每个测试。

于 2012-07-10T09:56:32.330 回答
6

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

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

于 2012-07-10T09:58:06.787 回答