探讨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和服务器交互的时候,先定义好接口后,服务器写好接口后就暂时写好返回数据(假的),然后双方开始自己开发不受影响。这种思想不仅对我们软件技术开发很有帮助,对其他工作也有指导意义,我们在与人合作完成一件事时候,要首先弄清楚如何合作,其次先把对方有影响的事尽量做好,最后才是自己独立部分,这样合作双方工作能够最大程度不影响对方进度。

    原文作者:Simple_world
    原文地址: https://www.jianshu.com/p/72503d5c01d0
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞