2013-07-11 43 views
3

我正在寫junit測試來測試BaseClass方法。該方法使用超類成員。 構造函數BaseClass調用super(arg1, arg2)。 在super(arg1,arg2)構造函數中,有一個依賴注入器,用於設置超類的私有成員 。 當我運行測試時,由於沒有設置依賴關係,super()會拋出一個 異常。我只想在super()中使用依賴注入來設置私有成員。如何使用mockito?超級類的嘲笑/間諜私人成員

回答

2

現場注入始終是測試的問題。所以,只要您有選擇,請選擇構造函數注入。

你可以啓動依賴注入器,並注入一個模擬而不是真實的類。解決方案將取決於您實際使用的DI框架(guice,cdi,...)對於guice,您可以使用jukito,例如cdi Arquillian。但是它會減慢測試執行速度並增加測試類的複雜性。

作爲一種替代方案,您可以在您的測試類的實例上反映私人領域,只需設置一個模擬。喜歡的東西:

instance = new TestObject(); 
Field injected = TestObject.class.getDeclaredField("injected"); 
injected.setAccessible(true); 
injected.set(instance, mock(InjectedType.class)); 

TestObject的是,你要測試的類,injected私人領域,其中一些被注入的InjectedType私有字段的類型。

+0

謝謝@Andreas_D,但問題是超類的私人成員正在其構造函數中設置。所以我的代碼在這裏拋出異常:'instance = new TestObject();' – vikas