我開始在我的項目中練習TDD,作爲背景它也包含遺留代碼。我們使用Mockito作爲模擬框架並遵循Spring MVC方法。單元測試和太多的模擬
有些時候有一個Service
類實現與許多不同的DAO
對象作爲@Autowired
屬性。這些服務中有簡單的方法,例如completeTransaction
。
completeTransaction
會使用很多DAO
對象來完成其責任
- 更新和保存交易
- 推進業務流程
- 關閉其他等待的操作
然而,執行這些操作時,該方法需要調用不同的DAO
來獲取和更新t ransaction,獲取業務流程ID,獲取未決事務(並保存其更新)。這意味着單元測試這種方法使我添加了許多@Mock
屬性。在測試完成之前,我需要設置模擬對象來測試某個條件。
這看起來像是一種代碼味道,對我來說,它幾乎感覺就像測試確保代碼的實現,而不僅僅是它的合約。再次,不嘲笑依賴關係,測試用例不會運行(由於NPE和其他)。
我可以按照如何清理代碼的策略是什麼? (儘管如此,我無法真正提供實際的源代碼)。我在想,有一種可能性是用類似於(「getPendingOperations」和「advanceBusinessProcess」)的方法來設置一個Facade類。然後我可以嘲笑一個依賴。但是,我認爲在所有其他有這種情況的課程中,我需要做同樣的事情,然後恐怕最終會出現許多「輔助」類,只是爲了進行更清潔的測試。
謝謝您的高級。
我不認爲有任何開發人員沒有看到這一點,對於遺留代碼,我嘗試編寫測試來測試整個流程,以便模擬DAO並在Controller級別編寫測試,以允許服務和組件去做他們打算做的事...... –