2014-05-05 138 views
0

我們有一個控制器,它有一個接受另一個類對象的構造器。 例如,使用依賴注入對控制器進行單元測試

ABCController(IXyz obj){this.xyz = obj;} 

現在,在單元測試,在實例化的電腦板,我們做這樣的事情:

ABCController controller = new ABCController (new Xyz()); 

我們注入從單元測試項目,這之後我們的依賴能夠測試控制器的所有方法。

現在最大的問題是,實例化控制器而不是提供/注入依賴的標準方式是什麼?

我同意這就是存在大量嘲諷/測試框架的原因。但是我們是否需要採用新框架altogther才能避免注入依賴關係?或注入是最好的權衡,而不是完全採用新的框架?

請指教/澄清。

回答

1

依賴注入的要點是你要注入依賴。所有的模擬框架都可以幫助您創建一個模擬對象來進行測試,而不需要自己用大量的樣板代碼創建新的測試對象。

使用容器或DI框架在您的測試IMO中創建控制器並不是一個好主意,因爲您應該知道模擬對象以及您正在創建的內容。

所以你做得很對,但是使用Moq或Autofixture創建一個模擬IXyz來測試,而不是每次創建一個longhand。

1

有兩個上下文來回答這個問題。首先,如何在測試時決定什麼對象(嘲諷或存根)。其次,如何配置注入應用程序的依賴關係。

1.當測試

當測試(我的意思是單元測試居多),你經常要隔離正在從依賴測試的代碼。這裏有一個模擬框架(Moq,NSubstitute,Rhino Mocks等)派上用場。這些模擬一個依賴關係,並允許您進一步將測試中的代碼與更改的依賴關係分開。

請注意,您可以爲創建存根類實現,以便爲每個需要注入的接口創建存根類實現。但是,在一個大型項目中維護可能會很乏味。但是,有些項目喜歡做這樣的事情。但是,嘲笑框架通常提供的功能僅僅是存根。他們提供基於交互的斷言,可以記錄和回放發生在依賴關係上的操作。一旦記錄完成,這些行爲便可成爲測試斷言的基礎。例如,一個特定的依賴是多少叫,等

2.對於應用

在運行時,使用依賴注入的應用程序,需要一種方式來配置和解決依賴關係。依賴關係的應用程序配置爲應用程序進程定義了「控制反轉」。在這種情況下,通常會引入控制容器(Ninject,Castle Windsor,StructureMap等)的反轉來幫助管理依賴項的配置和解決方案。

希望這會有所幫助。

相關問題