2013-02-17 46 views
0
public class TargetObjectWrapper extends TargetObject { 
    @Mock SomeObject myMockOfSomeObject; 
    @InjectMocks TargetObject targetObject; 

    public TargetObjectWrapper(){ 
     this.targetObject = mock(originalObject); 

     //doAnswer(...).when(...) methods 
    } 

    //Override other methods of TargetObject 
} 

我試圖注入特定的模擬對象爲targetObject的一個領域。我知道targetObject將始終有一個具有此特定簽名的字段。用Mockito,如果我用@InjectMocks注入一個對象到我的模擬中,我該如何避免使其他對象無效?

這一切工作,我可以注入myMockOfSomeObject成功,並適當地重定向呼叫。

但當TargetObject類包含其他領域,如下面這個簡單的例子,那場被清零了,並導致空指針異常,當我通過對原始對象的請求。

Log log = LogFactory.getLog(getClass());

我怎樣才能避免造成其他的對象,以得到空值?特別是如果其他變量可能從對象變爲對象(此代碼應該是通用的)?

+0

還注入模擬日誌。 – 2013-02-17 08:41:54

+0

我不控制我在這種情況下嘲笑的代碼,我只知道如果它將使用我的單元測試代碼,它將具有SomeObject,但其他變量可以是任何東西。日誌只是無限可能的例子之一。 – 2013-02-17 12:41:59

回答

1

看來,spy(..)而不是mock(...)是在這種情況下去正確的方式。雖然我還沒有測試過它是否注入了我的模擬對象,但我相信它確實如此。

0

@RunWith(MockitoJUnitRunner.class)註釋添加到您的測試類。

相關問題