單元測試第四彈——使用Mock技術進行單元測試

單元測試第四彈——使用Mock技術進行單元測試

碰撞測試是汽車開發活動中的重要組成部分。全部汽車在上市以前都要通過碰撞測試,並公佈測試結果。碰撞測試的目的用於評定運輸包裝件在運輸過程當中承受屢次重複性機械碰撞的耐衝擊強度及包裝對內裝物的保護能力。說簡單點就是爲了測試汽車在碰撞的時候鎖所產生的自身損傷、對車內人員及車外人員、物品等的損傷狀況。
單元測試第四彈——使用Mock技術進行單元測試
在進行汽車的碰撞測試時,固然不能讓真人來進行測試,通常採用假人來測試。可是爲了保證測試的真實性及可靠性,假人的生物力學性能應該和人體同樣——好比身體各部分的大小和質量,以及關節的剛性等等,只有這樣使用它們的模擬才能和現實相匹配。爲了保證覆蓋到的狀況夠全面,通常都會使用各類不一樣的假人,不一樣的假人模擬男性或者女性的身體,以及不一樣身高和年齡的人體。web

想一想軟件測試,其實和汽車的碰撞測試流程差很少。一個軟件在發佈上線以前都要通過各類測試,併產出測試報告,更嚴格的一點的要保證單測覆蓋率不能低於某個值。和汽車碰撞測試相似,咱們在軟件測試中也會用到不少「假人」。用這些「假人」的目的也是爲了保證測試有效的進行。markdown

why網絡

不知道你在平常開發中有沒有遇到過如下問題或需求:框架

一、和別人一塊兒作同一個項目,相互之間已經約定好接口。而後你開始開發,開發完本身的代碼後,你想測試下你的服務實現邏輯是否正確。可是由於你依賴的只是接口,真正的服務還有開發出來。ide

二、仍是和上面相似的場景,你要依賴的服務是經過RPC的方式調用的,而外部服務的穩定性很難保證。性能

三、對於一個接口或者方法,你但願測試其各類不一樣狀況,可是依賴的服務的執行策略及返回值你沒辦法決定。單元測試

四、你依賴的服務或者對象很難建立!(好比具體的web容器)測試

五、依賴的對象的某些行爲很難觸發!(好比網絡異常)調試

六、以上問題你都沒有,可是你要用的那個服務他處理速度實在是太慢了。對象

上面這些狀況都是平常開發測試過程當中可能遇到的比較麻煩的問題。這些問題都會大大的提升測試成本。能夠說,不少開發人員不肯意寫單元測試很大程度上都和以上這六點有關係。

幸運的是,Mock對象能夠解決以上問題。使用mock對象進行的測試就是mock測試。

what

mock測試就是在測試過程當中,對於某些不容易構造或者不容易獲取的對象,用一個虛擬的對象來建立以便測試的測試方法。

mock對象,就是非真實對象,是模擬出來的一個對象。能夠理解爲汽車碰撞測試的那個假人。mock對象就是真實對象在調試期間的代替品。
單元測試第四彈——使用Mock技術進行單元測試

你建立這樣一個「假人」的成本比較低,這個「假人」能夠按照你設定的「劇情」來運行。

在Java的單元測試中,不少Mock框架可使用,用的比較多的有easymock、mockito、powermock、jmockit等。

面向對象開發中,咱們一般定義一個接口,使用一個接口來描述這個對象。在被測試代碼中只是經過接口來引用對象,因此它不知道這個引用的對象是真實對象,仍是mock對象。

好了,這篇文章的內容差很少就這些了,主要是讓你們知道,在Java中可使用mock對象來模擬真實對象來進行單元測試,好處不少。下一篇會詳細介紹如何使用mockito框架進行單元測試。

相關推薦

單元測試第一彈——從軟件開發生命週期談單元測試

單元測試第二彈——單元測試與單元測試框架

單元測試第三彈——使用JUnit進行單元測試
單元測試第四彈——使用Mock技術進行單元測試

相關文章
相關標籤/搜索