×

单元测试

96
zzyytt
2017.03.19 22:42* 字数 1217

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

新技术
Web note ad 1