2012-07-10 67 views
3

我有一个测试类junit.framework.TestCase扩展junit.framework.TestCase与几个测试methods.Each方法打开一个HTTP连接到服务器和交换请求和响应JSON字符串。一个方法得到一个字符串称为UID响应(类似于sessionId),我需要使用在随后的请求到服务器。如何在JUnit测试之间共享状态?

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

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

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

+1

显示您的代码。 – carlspring 2012-07-10 09:52:25

回答

4

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

使用此模式:

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()被要求每个需要的测试,这对自己的测试,可以独立运行各个测试。

4

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

有关更多信息,请参阅this SO answer

相关问题