爲了能夠單元測試我的C++代碼,我通常會傳遞被測試類的構造函數一個或多個可以是「生產代碼」或假/模擬對象的對象(讓我們調用這些注射物體)。我已通過C++中用於依賴注入的接口vs模板
- 創建了「生產代碼」類和假/模擬類繼承的接口。
- 使被測試的類成爲模板類,該類將注入對象的類型作爲模板參數,並將注入對象的實例作爲參數傳遞給構造函數。
一些隨機的想法:
- ,直到我們有概念(C++ 0x中),只有文件和參數的命名會提示什麼提供被測類(使用模板時)。
- 它並不總是能夠創造遺留代碼的接口
- 的接口基本上只創建能夠做到依賴注入
- 以同樣的方式:模板測試類只是做使依賴注入
你有什麼想法?這個問題還有其他解決方案嗎?
這很簡單,但非常強大。我喜歡! – 2009-07-15 14:48:11
爲了記錄,人們應該意識到使方法變爲虛擬問題(參見非虛擬接口(NVI)習語) – 2009-08-29 23:10:34
是的,有時這種方法可能會與「純粹的NVI」發生衝突。在很多情況下,你可以嘲笑受保護的虛擬函數,但是如果你確實需要模擬公共的非虛擬接口,那麼我認爲它不會讓公衆虛擬化,並且仍然使用NVI。在這種情況下,人們會失去一些編譯器執行的最佳實踐,但本身並不是最佳實踐。 – 2009-09-01 22:57:55