简单谈谈android studio 的单元测试
2016-08-21 17:55
239 查看
作者原文:点击打开链接
面对android studio Run 一次项目要等好几分钟的痛点,不得不研究一下android studio 的单元测试。
其实我的目的很简单,在不对视图进行操作的前提下,测试一些activity 的生命周期,或网络拉取数据的一些处理,比如解析 json 数据啊,做网络请求啊等等,也就是对 Model层的测试。这些不需要操作视图,但在没有单元测试环境下,比如我们网络请求一些数据,Log 打印看看是否请求成功,却又要 利用模拟器或真机Run 一次项目,花费好几分钟,这是不能容忍的。
于是乎,强大的 android studio 也考虑到了这一点,给我们提供的简单的单元测试类。
让我们来简单的了解学习一下吧。
首先先来了解一下一些名称,方便下面介绍和使用:
在java中咱们有用过 JUnit 的 单元测试 ,那android 也是基于 java 语言编写的,所以也有个 JUnit的单元测试。在做 android 的单元测试需要导入依赖:
其中, test目录为在本机执行单元测试代码的目录, androidTest为在Android设备上执行单元测试代码的目录。如下图:
Android 自带的 junit单元测试的一些测试类(androidTest测试 需要运行在模拟机或真机上)
1、InstrumentationTestCase框架:
Instrumentation和Activity有点类似,只不过Activity是需要一个界面的,而Instrumentation并不是这样的,我们可以将它理解为一种没有图形界面的,具有启动能力的,用于监控其他类(用Target Package声明)的工具类。
举个例子,利用InstrumentationTestCase 启动一个activity:
在androidTest下新建一个java类,并且继承自InstrumentationTestCase编写一个public void的方法,但是必须要是方法名以test打头,比如testPublishSubject,并不需要@Test注解
?
2、ApplicationTestCase——测试整个应用程序的类。它允许你注入一个模拟的Context到应用程序中,在应用程序启动之前初始化测试参数,并在应用程序结束之后销毁之前检查应用程序。
使用Context,你可以浏览资源,文件,数据库等等。基类是AndroidTestCase,一般常见的是它的子类,和特定组件关联。
测试代码如下:
?
Log 日志:
07-22 23:27:10.276 32259-32259/demo.zts.com.demo I/MyApp: .........MyApp....app_name..........demo
07-22 23:27:10.276 32259-32319/demo.zts.com.demo I/TestRunner: started: testStart(demo.zts.com.demo.ApplicationTest)
07-22 23:27:10.286 32259-32319/demo.zts.com.demo I/..: .............ApplicationTest..........app_name..............demo
3、ActivityUnitTestCase——对单个Activity进行单一测试的类。使用它,你可以注入模拟的Context或Application,或者两者。它用于对Activity进行单元测试。也就是说你可以用于测试单独的activity ,虽然也需要利用模拟机或真机启动,但你启动的只是你需要做测试的activity,于其他activity无关。
测试代码如下:
要测试的 activity
?
测试类
?
测试 Log 日志:
* 07-22 23:39:44.146 3171-3171/demo.zts.com.demo I/System.out: ...............MainActivity......onCreate............
07-22 23:39:44.146 3171-3171/demo.zts.com.demo I/MainActivity: ................onCreate............................
07-22 23:39:44.151 3171-3171/demo.zts.com.demo D/MZPerfObserver: demo.zts.com.demo onCreate consume 153 ms
07-22 23:39:44.151 3171-3171/demo.zts.com.demo I/System.out: ...............MainActivity......onStart............
07-22 23:39:44.151 3171-3171/demo.zts.com.demo I/MainActivity: ................onStart............................
07-22 23:39:44.326 3171-3171/demo.zts.com.demo D/OpenGLRenderer: Enabling debug mode 0
07-22 23:39:44.361 3171-3171/demo.zts.com.demo I/System.out: ...............MainActivity......onStop............
07-22 23:39:44.361 3171-3171/demo.zts.com.demo I/MainActivity: ................onStop............................
07-22 23:39:44.421 3171-3224/demo.zts.com.demo I/TestActivity: ................startActivity............................
还有很多常见的测试,比如ServiceTestCase,ProviderTestCase2等,大家需要慢慢琢磨。
Android 自带的 junit单元测试的一些测试类(test 测试 ,不需要模拟机,电脑直接运行)
比如我需要测试一段java代码,而这段java代码跟android没关系,也就是不用到android的资源,如context,activity 等,说白了就是简单的 java 测试,当然,嘿嘿,android studio也是可以做java代码测试的。
测试代码如下,测试 4+4 等于几:
?
测试成功:
以上测试类的运行是 -点击测试右键 - 选择 RunXXXXX
测试类:
?
测试结果:
看,咱们利用application 拿到 android 下的资源,但又不像刚才上面的 androidTestCompile 需要模拟机,是不是很6,我电脑配置比较低,本次测试需要40S多,但不真机快多了。
需要注意几点,类头部需要声明 @ 注解:
并且测试方法是以 textxxx() 开头的,如上面的 testJson() ,方法也需要@Test注解!!!
Robolectric 还可以测试 activity ,如:
?
其中
这句代码就是启动了MainActivity 的生命周期
Robolectric 单元测试类 的 启动 也是跟 上面test 测试类一样,选择 -MainActivityTest2 --右键 -- 选择 Run MainActivityTest2
好了,单元测试就介绍到这里,
其实我也只是初步理解,上面那些基本的也是我做项目的需要我才去学习使用的,还有好多强大的功能大家慢慢探索。
面对android studio Run 一次项目要等好几分钟的痛点,不得不研究一下android studio 的单元测试。
其实我的目的很简单,在不对视图进行操作的前提下,测试一些activity 的生命周期,或网络拉取数据的一些处理,比如解析 json 数据啊,做网络请求啊等等,也就是对 Model层的测试。这些不需要操作视图,但在没有单元测试环境下,比如我们网络请求一些数据,Log 打印看看是否请求成功,却又要 利用模拟器或真机Run 一次项目,花费好几分钟,这是不能容忍的。
于是乎,强大的 android studio 也考虑到了这一点,给我们提供的简单的单元测试类。
让我们来简单的了解学习一下吧。
首先先来了解一下一些名称,方便下面介绍和使用:
在java中咱们有用过 JUnit 的 单元测试 ,那android 也是基于 java 语言编写的,所以也有个 JUnit的单元测试。在做 android 的单元测试需要导入依赖:
androidTestCompile 'junit:junit:4.12'
testCompile 'junit:junit:4.12'
其中, test目录为在本机执行单元测试代码的目录, androidTest为在Android设备上执行单元测试代码的目录。如下图:
Android 自带的 junit单元测试的一些测试类(androidTest测试 需要运行在模拟机或真机上)
1、InstrumentationTestCase框架:
Instrumentation和Activity有点类似,只不过Activity是需要一个界面的,而Instrumentation并不是这样的,我们可以将它理解为一种没有图形界面的,具有启动能力的,用于监控其他类(用Target Package声明)的工具类。
举个例子,利用InstrumentationTestCase 启动一个activity:
在androidTest下新建一个java类,并且继承自InstrumentationTestCase编写一个public void的方法,但是必须要是方法名以test打头,比如testPublishSubject,并不需要@Test注解
?
使用Context,你可以浏览资源,文件,数据库等等。基类是AndroidTestCase,一般常见的是它的子类,和特定组件关联。
测试代码如下:
?
07-22 23:27:10.276 32259-32259/demo.zts.com.demo I/MyApp: .........MyApp....app_name..........demo
07-22 23:27:10.276 32259-32319/demo.zts.com.demo I/TestRunner: started: testStart(demo.zts.com.demo.ApplicationTest)
07-22 23:27:10.286 32259-32319/demo.zts.com.demo I/..: .............ApplicationTest..........app_name..............demo
3、ActivityUnitTestCase——对单个Activity进行单一测试的类。使用它,你可以注入模拟的Context或Application,或者两者。它用于对Activity进行单元测试。也就是说你可以用于测试单独的activity ,虽然也需要利用模拟机或真机启动,但你启动的只是你需要做测试的activity,于其他activity无关。
测试代码如下:
要测试的 activity
?
?
* 07-22 23:39:44.146 3171-3171/demo.zts.com.demo I/System.out: ...............MainActivity......onCreate............
07-22 23:39:44.146 3171-3171/demo.zts.com.demo I/MainActivity: ................onCreate............................
07-22 23:39:44.151 3171-3171/demo.zts.com.demo D/MZPerfObserver: demo.zts.com.demo onCreate consume 153 ms
07-22 23:39:44.151 3171-3171/demo.zts.com.demo I/System.out: ...............MainActivity......onStart............
07-22 23:39:44.151 3171-3171/demo.zts.com.demo I/MainActivity: ................onStart............................
07-22 23:39:44.326 3171-3171/demo.zts.com.demo D/OpenGLRenderer: Enabling debug mode 0
07-22 23:39:44.361 3171-3171/demo.zts.com.demo I/System.out: ...............MainActivity......onStop............
07-22 23:39:44.361 3171-3171/demo.zts.com.demo I/MainActivity: ................onStop............................
07-22 23:39:44.421 3171-3224/demo.zts.com.demo I/TestActivity: ................startActivity............................
还有很多常见的测试,比如ServiceTestCase,ProviderTestCase2等,大家需要慢慢琢磨。
Android 自带的 junit单元测试的一些测试类(test 测试 ,不需要模拟机,电脑直接运行)
比如我需要测试一段java代码,而这段java代码跟android没关系,也就是不用到android的资源,如context,activity 等,说白了就是简单的 java 测试,当然,嘿嘿,android studio也是可以做java代码测试的。
测试代码如下,测试 4+4 等于几:
?
以上测试类的运行是 -点击测试右键 - 选择 RunXXXXX
测试类:
?
看,咱们利用application 拿到 android 下的资源,但又不像刚才上面的 androidTestCompile 需要模拟机,是不是很6,我电脑配置比较低,本次测试需要40S多,但不真机快多了。
am = RuntimeEnvironment.application.getAssets();
需要注意几点,类头部需要声明 @ 注解:
@RunWith(RobolectricGradleTestRunner.class) @Config(constants = BuildConfig.class, sdk = 21)
并且测试方法是以 textxxx() 开头的,如上面的 testJson() ,方法也需要@Test注解!!!
Robolectric 还可以测试 activity ,如:
?
MainActivity mainActivity = Robolectric.setupActivity(MainActivity.class);
这句代码就是启动了MainActivity 的生命周期
Robolectric 单元测试类 的 启动 也是跟 上面test 测试类一样,选择 -MainActivityTest2 --右键 -- 选择 Run MainActivityTest2
好了,单元测试就介绍到这里,
其实我也只是初步理解,上面那些基本的也是我做项目的需要我才去学习使用的,还有好多强大的功能大家慢慢探索。
相关文章推荐
- 简单谈谈android studio 的单元测试
- 简单谈谈对android studio 的单元测试
- 在Android Studio进行“简单配置”单元测试(Android Junit)
- 谈谈单元测试....
- 用Visual studio2005的单元测试框架实现一个简单的计算器
- [翻译]简单谈谈事件与委托 (转)
- 谈谈TCP和UDP的一些简单应用
- 看了,容易被忽略的细节(1):config文件的使用 ,我也谈谈这个简单的问题
- 由浅至深,谈谈.NET混淆原理 (二) 最简单的混淆
- [翻译]简单谈谈事件与委托
- 谈谈TCP和UDP的一些简单应用
- 初学者看过来:简单谈谈 C/C++ 递归的思想,实现,以及和循环的关系。
- 简单谈谈组件及COM---转载
- 简单谈谈跳板的隐藏
- 初学者看过来:简单谈谈 C/C++ 递归的思想,实现,以及和循环的关系。
- OI之外的一些东西:简单谈谈排序网络
- 简单谈谈事件与委托
- Visual Unit:单元测试原来可以如此简单
- NUnit的使用(1)——创建一个简单的单元测试
- [翻译]简单谈谈事件与委托