探討Android sdk中引入MockView的軟件思維

發現問題

      最近我在讀Android WebView源碼時候,發現

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是什麼鬼?
      我又仔細看了下,發現在最新Android sdk android-28中,它是繼承MockView, 裏面只有接口沒有具體實現,但是低版本的sdk比如android-27 android-26它都是正常的,爲什麼呢?本文就探討下這個問題。

原因調查

      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.基本意思是說,它是用戶創建一個UI時用的臨時的、仿製的基本View !!!???依舊霧水一頭。
      百度+谷歌+問大佬一波,有同學表示在單元測試時候,聽過這個Mock,Mock測試框架可以將這些測試依賴的對象虛擬化,我們不必創建一個真實對象就可以進行調用測試。它主要作用是模擬一些在應用中不容易構造或者比較複雜的對象,從而把測試與測試邊界以外的對象隔離開。
      唉,有點意思了! 又看了波大神的文章:https://www.telerik.com/blogs/why-mocking-matters,終於搞明白了,谷歌是利用Mock的思想創建了這個MockView。我們知道谷歌發佈的Sdk其實只是爲了提供App開發運行接口,實際運行時候替換爲當前系統的Sdk。具體說就是當谷歌在新的系統(Framework)版本上準備對WebView實現機制進行改動,同時又希望把新的sdk提前發出來,不影響用到WebView的App開發,於是谷歌提供給Android開發的sdk中讓WebView繼承自MockView,這個WebView只是暴露了接口,沒有具體實現;這樣當谷歌關於WebView新的實現做好,利用WebView,app也就做好了,perfect!!

啓迪與思考

       Mock是一種把合作雙方工作解耦合的方法。合作時候雙方把合作通道、接口制訂好,並首先讓合作接口能夠返回一些虛擬的數據,這樣合作雙方就能夠互不影響開發進度。比如App和服務器交互的時候,先定義好接口後,服務器寫好接口後就暫時寫好返回數據(假的),然後雙方開始自己開發不受影響。這種思想不僅對我們軟件技術開發很有幫助,對其他工作也有指導意義,我們在與人合作完成一件事時候,要首先弄清楚如何合作,其次先把對方有影響的事儘量做好,最後纔是自己獨立部分,這樣合作雙方工作能夠最大程度不影響對方進度。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章