2009年9月30日 星期三

單元測試(5): 可測試性

這個系列,請見
單元測試(1): 什麼是單元測試
單元測試(2): 單元測試的好與壞
單元測試(3): 單元測試的好與壞2
單元測試(4): 單元測試的好與壞3

由前面的文章可知,單元測試的好壞,相當依賴於原程式的可測試性。為了增加可測試性,我們可以增加/修改原程式的架構,以便進行測試。

舉例來說:
1  原為 private 的方法,為了可測試性,改成 internal
2  方法設成 virtual,以利 mock
3  原為 static 的方法,改成 instance 的方法,以利 mock

有人會質疑,這些步驟,是真的需要嗎?
最有名的例子,就是 asp.net 了。原來有個 System.Web 的 namespace,其下的類別雖然相當好用,但卻難以進行單元測試。到了asp.net MVC後,增加了 System.Web.Abstractions.dll 的類別庫,其下的類別都與 System.Web 的類別相似,甚至可以找到對應的類別。但 System.Web.Abstractions.dll 下的類別都進行了抽象,以利進行單元測試。

System.Web,可看到其下有相當多的類別是以 Base結尾,這些就是為了可測試性所增加的類別。例如HttpApplicationState不容易進行單元測試,就增加了 HttpApplicationStateBase 這個類別,利於進行單元測試。所以我們可以觀察到,兩者的成員(見 HttpApplicationState MembersHttpApplicationStateBase Members)幾乎是一樣的,只是 Base 的成員幾乎都是可被 override 。

沒有留言:

Share with Facebook