2017-02-23 8 views
1

您是否可以將mocks注入到@InjectMock中是深層存根還是需要用深層存根定義每個模擬?定義未使用的字段只是爲了用深存根對其進行註釋,這很不方便。你可以@InjectMock深存根沒有定義@Mock字段?

例如,有沒有辦法做到這一點,沒有定義注入,因爲它從來沒有在任何地方使用?

@InjectMocks 
private Object testMe; 

@Mock (answer = Answers.RETURNS_DEEP_STUBS) 
private Object injected; 

回答

0

不,你不能。你還堆放了各種各樣有趣的警告標籤:

  • RETURNS_DEEP_STUBS

    警告:此功能應該很少需要定期清潔代碼!將其留作遺留代碼。嘲諷一個模擬迴歸模擬,返回一個模擬(...),返回違反德米特法則或嘲諷價值對象(衆所周知的反模式)的有意義的提示。

    很好的引用我在網上看到有一天:每次模擬回來模擬一個仙子死亡

  • @InjectMocks

    的Mockito將嘗試通過構造器注入,setter注入,或財產注射以便並且如下所述僅任一注入嘲笑。如果以下任何一種策略失敗,那麼Mockito 將不會報告失敗;即您必須自己提供依賴關係。

    建築師注入;選擇了最大的構造函數,然後使用僅在測試中聲明的模擬來解析參數。如果該對象使用構造函數成功創建,則Mockito不會嘗試其他策略。 Mockito決定如果它有一個參數化的構造函數,就不會[原文如此]破壞一個對象。

通過允許自動深存根InjectMocks,你可能很難找到它的原因哪些測試的注入方式和你實際使用外地人口,哪些部分是真正的與嘲笑。這也可以防止您通過直接通過被測系統直接獲取它們來存儲或驗證任何值,這可能會產生副作用或破壞真實代碼和測試代碼之間的界限。

總之,答案是「否」;較長的答案是您應該考慮重構以包含適當的依賴注入訪問並避免任何當前的違規行爲Law of Demeter

相關問題