作家
登录

安卓单元测试全攻略,让代码测试一劳永逸

作者: 来源: 2017-08-15 09:26:36 阅读 我要评论

); 
  •  
  •  
  • public LoaderManager getLoaderManager() { 
  •  
  •     throw newRuntimeException("Stub!"); 
  •  
  •  
  • public View getCurrentFocus() { 
  •  
  •     throw newRuntimeException("Stub!"); 
  •  
  •  
  • protected void onCreate(BundlesavedInstanceState) { 
  •  
  •     throw new RuntimeException("Stub!"); 
  •  
  •  
  • public void onCreate(BundlesavedInstanceState, PersistableBundle persistentState) { 
  •  
  •     throw newRuntimeException("Stub!"); 
  •  
  • Robolectric的依附为:

    1. testCompile'org.robolectric:robolectric:3.3.2' 

    运行Robolectric须要起首对测试类进行设备,如下:

    对于有参数的Api,第一步就是验证传参。可能你会认为大年夜材小用,但浩瀚的血淋淋的惨案告诉我们越是渺小的器械越轻易产生问题,而单位测试就是赞助我们精渺小的问题解决在编码时代而纰谬外裸露。要验证参数的┞俘确性,起首我们须要要验证向queryMap中put的时刻是否精确。对于queryMap,我们须要验证K-V键值对的┞俘确性,照样那句防微杜渐,因为queryMap是一个private变量,在正常情况下我们无法获取到它的值,而为这个变量加一个对营业毫无用处的get/set办法就显得太克意了,我们的目标是为懂得决让代码更结实,bug更少,而不是为了测试而测试。拿不到queryMap参数测试还怎么进行?难道单位测试也要大年夜入门到放弃?要其实很多工作都是如许,当你认为某个问题完全没有办法解决的时刻,必定是你推敲的不敷周全。queryMap对象的值我们可以经由过程Java反射获得。反射的道理在这里我就不为大年夜家阐述了,在testParams办法中,我们起首经由过程getDeclaredField获取了queryMap对象,然后我们须要获获得put的key。key的获得使我们陷入了第二个难题,可能你会说,这有什么难的,持续反射啊,可这个key是一个private static变量,经由过程正常的反射是无法拿到key的,最多会拿到一个异常。照样那句,不要放弃寻找解决筹划,最终我们发明只要设置下虚拟机不去检测私有属性,即可完查对private static变量的获取。不要认为只是很小的一个参数,这么劳师动众不值得,据不完全统计,天天因为接口key值多写或是写错一个字母而产生的bug弗成胜数。

    1. @RunWith(MyRobolectricTestRunner.class)@Config(constants= BuildConfig.class,sdk=24) 
    1. @Beforepublic voidsetUp() {  
    2.   activity= Robolectric.setupActivity(WeatherActivity.class); 

    至此我们已经完成了对model的全覆盖测试,点击测试类前面的运行按钮,可以看到所有测试类运行的情况,绿色代表成功,红色代表存在问题,可以经由过程下方的Log日记查看引起测试掉败的问题点进行改┞俘,借助Jacoco统计对象可以看到单位测试覆盖率的情况。之所以选择应用Jacoco而不是IDE自带的Coverage是因为在测试&前提分支的情况下Coverage存在马脚,导致没有达到全覆盖的测试显示已覆盖完全。Jacoco的AndroidStudio集成收集资本并不多,集成办法不是存在潜在马脚就是过于繁琐。经由两天的赓续搜刮,终于发清楚明了一个史上最简单集成办法,只须要在主工程的gradle文件中添加一个Jacoco插件,gradle就会生成一个Jacoco Task,双击运行即可生成一份Html覆盖率申报。运行我们的model测试类,大年夜jacoco生成的html可以看到,我们的model已经达到了100%的全覆盖。既然如斯,我们是不是就可以认为MVP的M层已经ok了呢?等等,我们似乎漏掉了点什么,没错,onNext情况下的数据转换类还没有测试,下面我们来对convert类进行一下测试。

    MyRobolectricTestRunner为自定义的指向阿里云的设备文件,BuildConfig为当前model的BuildConfig文件,sdk为应用的sdk版本,之所以指定sdk版本是因为Robolectric须要下载对应sdk的镜像资本,指定版本就会应用本地已经下载好的sdk资本。第一次运行测试的时刻会主动到阿里云去下载相干文件,然后会在体系的C盘下生成一个.m2文件夹,如不雅依旧下载迟缓,可直接拷贝.m2文件夹到本身电脑的相对目次下直接应用。Robolectric几乎可以测试一切安卓办法,应用也是异常简单。例如:


      推荐阅读

      网络扫盲贴:10秒修复消失的网关地址

    前几天收到了一名网友的乞助,表示他无法正常上彀,并且当他在查找断网原因刹那,竟然发明默认的网关地址也消掉了。面对这种情况,他表示不知该若何处理。实际上,出现默认网关空白的情况有下面几个原因。起首,可能>>>详细阅读


    本文标题:安卓单元测试全攻略,让代码测试一劳永逸

    地址:http://www.17bianji.com/lsqh/36696.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)