我有一个测试,我配置了一些通用夹具但是在使用PowerMockRule之后,我在@BeforeClass方法中配置的静态变量重置为null。这会导致以下测试失败,但是如果删除PowerMockRule则会失败。
public class Test
{
@Rule
public PowerMockRule rule = new PowerMockRule();
private static String MyString;
@BeforeClass
public static void setupClass() throws Exception
{
MyString = "FOO";
}
@org.junit.Test
public void test() throws Exception
{
assertEquals("FOO", MyString);
}
}
答案 0 :(得分:2)
我有答案,但你不会喜欢它。
简短回答:它看起来像PowerMock中的缺陷,因此我们的错误跟踪器中有create a issue
长答案:您可能知道PowerMock能够通过自定义类加载器和修改后的字节代码来模拟静态,私有等等。然后使用@PowerMockRunner
,然后PowerMock可以控制加载测试类,测试类也由自定义类加载器加载。如果另一个jUnitRunner运行test并且使用了PowerMockRule
,那么测试类和测试所需的所有其他类都将加载标准类加载器。 PowerMock通过使用深度处理序列化/反序列化或使用objenesis重新加载所有这些类。因此,当重新加载类时,所有初始化的静态字段都是null
。
我已经简要检查过代码,但我还没有找到您的案例测试,我们已经处理了@BeforeClass
,因此我们的错误跟踪器中有create a issue,我会检查它深深地。
顺便问一下,请指出您使用哪个版本以及使用哪个依赖项。