2012-03-28 84 views
2

從我們的Mockito,全1.8.5.jar升級的Mockito,全1.9.0.jar現在看空指針使用的類註釋時,被嘲笑。下面是一個例子:升級的Mockito導致空指針問題

 
    @Mock 
    private static IAccountManager accountManager; 
    @Mock 
    private static IBusinessUnitManager businessUnitManager; 
    private static Gson parser;

@InjectMocks private static DownloadController downloadController;

@BeforeClass public static void setUpBeforeClass() throws Exception { parser = new Gson();

downloadController = new DownloadController(accountManager, 
    businessUnitManager, parser); 

}

@Before 公共無效設定()拋出異常{ MockitoAnnotations.initMocks(本); Mockito.reset(accountManager,businessUnitManager); }

只要在下載控制器中引用accountManager,它就會引發一個npe。這工作在1.8.5。

+2

是不是因爲你的領域是靜態的? – Dunes 2012-03-28 17:04:58

+0

是的,事實證明我必須刪除@InjectMocks,因爲並不是所有參數都可以注入並從DownloadController中移除靜態。如果您想將您的評論移至答案,我會選擇它。 – 2012-03-28 18:35:46

+0

啊,漫長的一天。通過注入我的意思是嘲笑...大聲笑 – 2012-03-28 18:57:39

回答

4

爲什麼注入嘲笑失敗的原因是因爲他們是靜態字段。靜態字段通常保留給保持不變的字段,並且不會從測試變爲測試,並且實例化有時可能很昂貴。對於實例字段,這是相反的情況,爲每個測試方法創建一個新的測試類實例(因此它的實例字段爲「復位」)。看起來Mockito堅持這一理念,並不試圖實例化靜態字段。

解決方法是要麼讓你的領域非靜態的,或者如果你需要他們是靜態的,然後設置它們在BeforeClass方法。