1、概念:
1、白盒测试、黑盒测试
http://baike.baidu.com/link?url=aSjxpEHNsfu7Zn_3cwJzh_MVP8Zoe2E772oBnsOK-RhVM_Y5aXpqH-OmavFhkwJYfdX8gthjmgdbSkEg4SpRy9J2FC4znwnQEUbUgY6bC4q
_txfo6HwtvViIvOVOXW00bVa6hG2kz52UcR0Eu1ub_4apTfcgJoKWhXVEUksWA2Bg111D0JQd46qb7zDNKVg4
https://zhidao.baidu.com/question/356809400.html
2、单元测试、集成测试
http://baike.baidu.com/item/%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95
http://baike.baidu.com/item/%E9%9B%86%E6%88%90%E6%B5%8B%E8%AF%95?fr=aladdin
http://blog.csdn.net/fireofjava/article/details/12834599
http://www.oschina.net/question/2680454_2181619/javascript:;sort=time
3、单元测试,单元的范围
http://blog.csdn.net/fireofjava/article/details/12834599
范围:一般是一个类(方法之间相互调用,有时候只测试一个方法太麻烦)
4、单元测试有几种类型
http://blog.csdn.net/jaychen2011/article/details/52712130
5、覆盖率:
http://blog.csdn.net/huiling815/article/details/53312127
http://www.cnblogs.com/z-bin/p/5728011.html
http://blog.csdn.net/shenggaofei/article/details/52905428
http://www.infoq.com/cn/articles/test-coverage-rate-role
6、综合网址中提到的单元测试的概念
http://chriszou.com/2016/04/13/android-unit-testing-start-from-what.html(里面的说针对一个方法的测试,不太赞同,应该是针对一个类的测试)
http://blog.csdn.net/jaychen2011/article/details/52712130
2、优势,为什么用:
http://blog.csdn.net/jaychen2011/article/details/52712130(非常有意义的四点)
http://chriszou.com/2016/04/16/android-unit-testing-about-why.html(总结的比较全)
https://www.zhihu.com/question/38555569
https://www.zhihu.com/question/27449950
https://www.zhihu.com/question/31135148
https://www.zhihu.com/question/46058948
3、相关框架:
1、Junit
1、下方粗略网址中的介绍,比如Junit4.12(稳定版)
http://www.tuicool.com/articles/IZJjeuJ
https://github.com/zhuifengshen/Junit4Demo
2、小创作-JUnit
http://chriszou.com/2016/04/18/android-unit-testing-junit.html
3、常用于测试断言
http://blog.csdn.net/jaychen2011/article/details/52712130
2、Mock、Mockito
两者关系:
http://www.cnblogs.com/wangtj-19/p/5822369.html(下面的两种误解中提到)
Mockito相关网址:
http://site.mockito.org/
https://github.com/mockito/mockito/blob/release/2.x/doc/release-notes/official.md
http://static.javadoc.io/org.mockito/mockito-core/2.7.13/org/mockito/Mockito.html#0
http://blog.csdn.net/bboyfeiyu/article/details/52127551#t3
前三个是英文官网,第四个是翻译,要看Mockito的基本用法,看第四个就足够了
其他网址:
http://hotdog.iteye.com/blog/937862
http://www.jianshu.com/search?q=Mockito&page=1&type=note
http://www.jianshu.com/p/3d6f76df21f9
http://www.jianshu.com/p/2cadfd40940f
http://www.jianshu.com/p/f6e3ab9719b9
https://github.com/mockito/mockito/wiki/Declaring-mockito-dependency
http://www.jianshu.com/search?q=Mock&page=1&type=note
http://www.jianshu.com/search?q=Mockito%202&page=1&type=note
总结下mockito的使用步骤、以及常用API
(结合goole官方例子,https://github.com/googlesamples/android-architecture)
(上面第四个网址,http://blog.csdn.net/bboyfeiyu/article/details/52127551#t3)
(下方实用网址中的第三第四个,网络请求的单元测试、Presenter的单元测试)
(以及自己在懒人看房中写的HomePresenterTest)
1、一般用来测试mvp中的presenter
2、在测试类中,定义一个presenter成员变量,
其他依赖的对象通过注解mock出来,比如网络Repository、视图View,并通过构造器注入
3、验证行为,验证函数的确切、最少、从未调用次数, verify
4、需要某些返回值时,用when,thenReturn或thenThrow模拟返回或抛出异常,所谓的做测试桩(Stub)
5、上面when中的模拟对象的调用带参数的函数,可以用参数匹配器,如anyInt、anyString等
6、 验证执行执行顺序,InOrder
...
x、为下一步的断言捕获参数 (1.8版本之后)()
ArgumentCaptor,结合断言使用
在某些情况下,当验证交互之后要检测真实的参数值时这将变得有用
常用API,除了上面列步骤中提到的,可以查看下面网址的目录:
http://blog.csdn.net/bboyfeiyu/article/details/52127551#t3
3、Espresso
http://www.jianshu.com/p/7d257016e129
简单总结下吧:
1、onView(ViewMachers),寻找用来测试的View,比如可以通过id(withId)、通过内容(withText)等来查找,
2、preform(ViewActions),执行某些动作,比如可以点击(click)、输入内容(typeText)等
3、check(ViewAssertions),检验测试结果,比如是否展示(isDisplayed()、not(isDisplayed()))、是否存在(doesNotExist)、是否被选中(isChecked())等
注意,看上面网址的图,或者看ViewMachers、ViewActions、ViewAssertions的源码来找相关函数
其他关键点:
1、数据注入,dagger2,,,
2、Junit 的@rule注解,(理解的不是很透彻)
作用是在每个测试方法的执行前后执行一些代码的一个方法,用的比较多的是ActivityTestRule