2016-03-02 29 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,我將對其進行深入檢查。

順便說一下,請指出您使用的是哪個版本,以及您使用的依賴關係。