2017-06-20 69 views
-2

我正在對MockitoJUnit進行整合。對於嘲諷的對象,我創建了一些setter方法setter方法如何更改業務需求?

@Mock 
private SomeDaoImplClass someDaoImplClass 

jdbcTamplate = Mockito.mock(NamedParameterJdbcTamplate.class) 
someDaoImplClass.setNamedParameterJdbcTamplate(jdbcTamplate) 

所以方法setNamedParameterJdbcTamplate(jdbcTamplate)不在,我在課堂上創造了這個setter method。 我得到了一些信息,你不能在商業類 b'coz其有效的業務單位創建這些設置方法。

請有人可以建議我如何set methods影響BU。

+0

我並不感到驚訝。拼寫警察也應該在你之後。這是一個XY問題。你需要說明你在這裏嘗試的是什麼,而不是要求如何繞過你的組織策略。 – EJP

回答

0

沒有業務對象應該分配自己的依賴(你知道,由於該Inversion of Control/Dependency Injection東西)

因此,如果您需要提供東西給你的對象,你可以使用setter方法或通過構造函數來完成它(後者是優選的)

確實,爲了測試而添加方法是不好的做法。在這種情況下,它可能是更糟糕:添加二傳手禁止我們做出對象immutable這是多線程工作時,人們需要的,並增加了一些安全限制(無屬性是沒有初始化的構造完成後

如果。你需要,以便增加這些方法文件就可以了並設置其知名度默認所以它從同一個包唯一可見的(測試將在同一封裝),以儘量減少在生產的影響

如果你不能添加setter或者修改構造函數......那麼它並不是全部丟失。你可以使用reflection。通過使用這個,你可以修改你的對象的任何屬性,即使沒有訪問器甚至最終屬性。 請注意,這會在運行時更慢,並且需要一些異常處理

+0

我喜歡做的是將字段可見性設置爲默認值,並添加'@ VisibleForTesting' – danielspaniol