我有一个测试类,使用多个测试方法扩展junit.framework.TestCase
。每个方法打开一个到服务器的HTTP连接,并交换请求和响应json字符串。一个方法得到一个带有一个名为UID的字符串的响应(类似于sessionId)我需要在后续的服务器请求中使用它。
我之前将该字符串写入文件,我的下一个请求读取该文件的字符串。我一次运行一个方法。现在我正在尝试使用该字符串而不进行文件操作。我保持一个hastable(因为那里为了这个目的,我在我的测试类中跟踪了许多UID作为实例变量,但最终发现每次方法调用时都会加载类,因为我的静态块每次都在执行。这导致丢失那些UID。 / p>
如何在不写入文件和阅读文件的情况下实现这一目标?
我怀疑我的标题是否符合我的要求。有人请相应地编辑。
答案 0 :(得分: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 ...
}
这种方法可以确保为每个需要它的测试调用login()
,它可以自己测试,并且可以独立运行每个测试。
答案 1 :(得分:5)
JUnit将为每个测试创建一个新的类实例。因此,您应该使用@BeforeClass带注释的静态方法将此信息设置为静态并保存到类中。
有关详细信息,请参阅this SO answer。