2016-03-02 26 views
0

我有一个测试,我配置了一些通用夹具,但使用PowerMockRule后,我在我的@BeforeClass方法中配置的静态变量重置为null。这会导致以下测试失败,但是如果您移除PowerMockRule它会通过。PowerMockito和@BeforeClass通用夹具设置

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

我有答案,但你不会喜欢它。

简短的回答:它看起来像在PowerMock的缺陷,所以create a issue在我们的bug跟踪

龙回答:正如你可能知道PowerMock能够模拟静态的,在加载类私募等通过自定义类加载器和修改的字节码。然后使用,然后PowerMock可以控制加载测试类,并且测试类也由自定义类加载器加载。如果另一个jUnitRunner运行测试并且使用PowerMockRule,则测试类和测试所需的所有其他类都使用标准类加载器加载。 PowerMock通过深度应对序列化/反序列化或使用objenesis来重新加载所有这些类。所以当类重新加载时,所有初始化的静态字段都是null

我已经简要地检查过代码,但我还没有找到您的案例的测试,并且我们在我们的错误跟踪器中处理了@BeforeClass,因此create a issue,我将对其进行深入检查。

顺便说一下,请指出您使用的是哪个版本,以及您使用的依赖关系。