想要更好地使用Android的TDD,应用MOCK是必不可少的。那么MOCK又是什么呢?说白了MOCK就是一系列的模拟类,在TDD中使用这些MOCK的类来代替真实的类。那为什么要用MOCK呢?
为了更好的说明用MOCK的理由,请看下图:
在这里模块A依赖于模块B,C,D,而我们要测的就是模块A。但是它有依赖,而且这些依赖说不定现在根本都还没实现或者很复杂,在这种情况下,如果要测模块A,MOCK就十分有必要了。如下图所示,我们将模块B,C,D都使用MOCK来代替,这样就可以消除A的所有依赖,让我们专注于A的测试了。
说起来容易,但是怎么用MOCK来代替所依赖的部分呢?又怎么来实现这些MOCK呢?
打开android.jar的android.test.mock目录,可以看到里面有很多Mockxxx类,这些都是ANDROID提供给我们的可以直接继承来实现的MOCK类,比如说你想创建一个MOCK CURSOR,就可以直接继承MockCursor,然后再加上一些自己的实现就可以了,这个我在下文会做详细的说明。当然可以MOCK的不仅限于这几个类,基本所有的类都可以MOCK,只要继承这个类并且重写你会用到的方法就可以了。当然如果类中有private的方法想要mock就比较麻烦了。
假如说一个应用中有一个ListView,ListView的内容来自于查询content provider得到的cursor。在对这个list进行TDD的时候要怎么来MOCK这个cursor呢?现来看一下android程序是如何得到cursor的呢?没错,用的是getContentResolve