我正在尝试将BaseClass中ThreadLocal中存储的String Object获取到TestClass。在下面的代码中,我定义了ThreadLocal并通过set()方法存储了一个String。但是当我试图在扩展BaseClass的TestClass中获取存储的字符串时,它变成了null。我错过了什么?
我的BaseClass代码如下:
package base;
import org.testng.annotations.BeforeSuite;
public class BaseClass {
private static final ThreadLocal<String> str = new ThreadLocal<>();
public void setString(String string){
str.set(string);
}
public static String getString(){
return str.get();
}
@BeforeSuite
public void setDesiredString(){
String desiredString = "I am a String.";
setString(desiredString);
}
}
我的TestClass代码如下:
package tests;
import base.BaseClass;
import org.testng.Assert;
import org.testng.annotations.Test;
public class TestClass extends BaseClass {
String str = getString();
@Test
public void TestString() {
Assert.assertEquals(str,"I am a String." );
}
}
当我运行TestClass时,我得到以下输出:
java.lang.AssertionError:
Expected :I am a String.
Actual :null
我希望有一个通过的测试,具有相同的预期和实际字符串,存储在ThreadLocal在BaseClass通过setDesiredString(),这是“我是一个字符串。”
1条答案
按热度按时间tyg4sfes1#
你可以像下面这样的基类来使它工作
在Test类中调用Threadlocal getter方法