Sep. 24 11:15~12:50
Teddy談過好幾次關於可測性(testability)這個主題,像是〈如何提升軟體的可測試性(一)〉、〈如何提升軟體的可測試性(二)〉、〈如何提升軟體的可測試性(三)〉、〈如何提升軟體的可測試性(四)〉、〈Quality Attribute Scenarios(11):Testability〉。今天與明天分別介紹《xUnit Test Patterns》這本書中所收錄的四個有助於提升可測性的模式。
Dependency Injection
Dependency Injection(DI,相依性注入)相信是一種大部分鄉民都很熟悉的設計技巧,其手法就是將SUT所使用到的DOC由外部傳入而非讓SUT自行產生。這樣一來,在測試的時候便可由測試案例以Test Double來取代DOC,達到在測試環境中單獨測試SUT的目的。
在實作上有三種常見的相依性注入方法,分別是透過建構函數(constructor injection)、設定函數(setter injection)或參數(parameter injection)將DOC注入到SUT。
Dependency Lookup
Dependency Lookup(相依性查詢)將尋找DOC的責任交給第三者(component broker)來負責,SUT向某個component broker索取所需的DOC。相較於DI,這種做法的好處是只要設定好component broker,客戶端的程式在使用SUT的時候就不需要自行注入DOC。缺點是SUT雖然與DOC沒有直接耦合,但卻多了與component broker產生耦合關係。
Dependency Lookup也是一種常用的技巧,有寫過JDBC程式的鄉民們就用過這個pattern。
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(jdbc:mysql://localhost/, userName,pwd);
DriverManager扮演component broker角色,Class.forName向系統註冊JDBC驅動程式,DriverManager會從合適的驅動程式中回傳一個connection物件。只要改變項系統註冊的驅動程式以及connection string,就可以讓DriverManager(component broker)傳回不同的connection物件(DOC)。
***
友藏內心獨白:設計技巧也可以變成測試模式。
沒有留言:
張貼留言