發(fā)現(xiàn)問題
??????最近我在讀Android WebView源碼時候,發(fā)現(xiàn)
public class WebView extends MockView {
/**
* Construct a new WebView with a Context object.
* @param context A Context object used to access application assets.
*/
public WebView(Context context) {
this(context, null);
}
但是我記得上一次看WebView時粥庄,它父類是AbsoluteLayout丧失,還帶有一些用法的注釋,那么這里的MockView是什么鬼惜互?
??????我又仔細(xì)看了下布讹,發(fā)現(xiàn)在最新Android sdk android-28中科侈,它是繼承MockView, 里面只有接口沒有具體實現(xiàn)炒事,但是低版本的sdk比如android-27 android-26它都是正常的臀栈,為什么呢?本文就探討下這個問題挠乳。
原因調(diào)查
??????MockView:mock防制权薯、虛假,也就是說這是一個虛假的View睡扬。What? 更糊涂了 去Android dev查下盟蚣。
??????MockView:Basic view that can draw a label (by default the view id), along with diagonals. Useful as a temporary mock view while building up a UI.基本意思是說,它是用戶創(chuàng)建一個UI時用的臨時的卖怜、仿制的基本View J嚎!B砜俊奄抽??甩鳄?依舊霧水一頭逞度。
??????百度+谷歌+問大佬一波,有同學(xué)表示在單元測試時候妙啃,聽過這個Mock档泽,Mock測試框架可以將這些測試依賴的對象虛擬化,我們不必創(chuàng)建一個真實對象就可以進(jìn)行調(diào)用測試揖赴。它主要作用是模擬一些在應(yīng)用中不容易構(gòu)造或者比較復(fù)雜的對象馆匿,從而把測試與測試邊界以外的對象隔離開。
??????唉燥滑,有點意思了! 又看了波大神的文章:https://www.telerik.com/blogs/why-mocking-matters渐北,終于搞明白了,谷歌是利用Mock的思想創(chuàng)建了這個MockView突倍。我們知道谷歌發(fā)布的Sdk其實只是為了提供App開發(fā)運行接口腔稀,實際運行時候替換為當(dāng)前系統(tǒng)的Sdk。具體說就是當(dāng)谷歌在新的系統(tǒng)(Framework)版本上準(zhǔn)備對WebView實現(xiàn)機制進(jìn)行改動羽历,同時又希望把新的sdk提前發(fā)出來焊虏,不影響用到WebView的App開發(fā),于是谷歌提供給Android開發(fā)的sdk中讓W(xué)ebView繼承自MockView秕磷,這個WebView只是暴露了接口诵闭,沒有具體實現(xiàn);這樣當(dāng)谷歌關(guān)于WebView新的實現(xiàn)做好,利用WebView疏尿,app也就做好了瘟芝,perfect!褥琐!
啟迪與思考
?????? Mock是一種把合作雙方工作解耦合的方法锌俱。合作時候雙方把合作通道、接口制訂好敌呈,并首先讓合作接口能夠返回一些虛擬的數(shù)據(jù)贸宏,這樣合作雙方就能夠互不影響開發(fā)進(jìn)度。比如App和服務(wù)器交互的時候磕洪,先定義好接口后吭练,服務(wù)器寫好接口后就暫時寫好返回數(shù)據(jù)(假的),然后雙方開始自己開發(fā)不受影響析显。這種思想不僅對我們軟件技術(shù)開發(fā)很有幫助鲫咽,對其他工作也有指導(dǎo)意義,我們在與人合作完成一件事時候谷异,要首先弄清楚如何合作分尸,其次先把對方有影響的事盡量做好,最后才是自己獨立部分晰绎,這樣合作雙方工作能夠最大程度不影響對方進(jìn)度寓落。