Android Studio 单元测试入门
2016-05-07 23:59
441 查看
通常在开发Android app的时候经常会写一些小函数并验证它是否运行正确,通常做法我们是把这个函数放到某个界面(Activity上)执行一下,运行整个工程跑一下app,通过打log的方式来验证。然后现在我们活用Android Studio自带的单元测试功能即可免除这种麻烦
配置
编写Java测试用例
编写Android测试用例
其他测试基类
在Android Studio中进行单元测试并不需要什么插件或者过多的配置,Android Studio本身就集成了测试环境,无论是单纯的java代码单元测试还是依赖Android SDK的Android代码单元测试,都能得心应手。
首先在你的gradle中加入Junit的依赖,注意这里的依赖方式是测试期间的依赖(testCompile):
再在项目的app/src下面和main文件夹同级的建立androidTest和test目录,并且分别在各自目录下建议java/com/xxx/xxx类似的和主工程一致的包名目录,建立好后,你的项目在Android Studio的Project中应该是这样的:
如果所写的测试代码没有使用android sdk(android.***下的代码),那么可以在test目录下新建,本例中即为ExampleUnitTest,例子中测试了一个RxJava的Observable的发射后被消费的结果。
注意测试用例即一个public void的方法,并且加上@Test注解,这是Junit的标准用法
这时候打开Android Studio左边的Structure的面板,可以看到测试用例方法testPublishSubject
右击并运行它,测试通过,返回了正确的值
注意本测试用例试用了System.out.println所以测试结果直接打印在了控制台上,如果把打印的地方换成Log.d()呢,你会发现报错:
这个实际是因为你在java的Unit test中引用了Android的代码,即android.util.log.Log。所以对于测试Android代码,需要在androidTest中
Android测试用例我们可以
在androidTest下新建一个java类,并且继承自InstrumentationTestCase
编写一个public void的方法,但是必须要是方法名以test打头,比如testPublishSubject,并不需要@Test注解
本例运行后,会在Android Monitor中以test这个LOGTAG打出和上一节一样的Log
Android Studio也提供了测试单个Activity或者多个Activities的测试用例方法基类,比如ActivityInstrumentationTestCase2,步骤为
在androidTest下新建一个java类,并且继承自ActivityInstrumentationTestCase2,传入需要测试的Activity的类到泛型
复写setUp方法,获得Context
编写一个public void的方法,但是必须要是方法名以test打头,比如testStart,并不需要@Test注解
运行这个测试用例,你会发现模拟器上单独启动了这个Activity
除了InstrumentationTestCase和ActivityInstrumentationTestCase2外,android.test还提供了很多别的测试基类,比如
ActivityUnitTestCase
MockApplication
ServiceTestCase
转自:http://www.codeceo.com/article/android-studio-unit-test.html
内容提要
配置编写Java测试用例
编写Android测试用例
其他测试基类
配置
在Android Studio中进行单元测试并不需要什么插件或者过多的配置,Android Studio本身就集成了测试环境,无论是单纯的java代码单元测试还是依赖Android SDK的Android代码单元测试,都能得心应手。首先在你的gradle中加入Junit的依赖,注意这里的依赖方式是测试期间的依赖(testCompile):
dependencies { testCompile 'junit:junit:4.12' }
再在项目的app/src下面和main文件夹同级的建立androidTest和test目录,并且分别在各自目录下建议java/com/xxx/xxx类似的和主工程一致的包名目录,建立好后,你的项目在Android Studio的Project中应该是这样的:
编写Java测试用例
如果所写的测试代码没有使用android sdk(android.***下的代码),那么可以在test目录下新建,本例中即为ExampleUnitTest,例子中测试了一个RxJava的Observable的发射后被消费的结果。注意测试用例即一个public void的方法,并且加上@Test注解,这是Junit的标准用法
package com.jason.rxjavademo; import org.junit.Test; import rx.Observer; import rx.subjects.PublishSubject; public class ExampleUnitTest { @Test public void testPublishSubject() { PublishSubject<String> stringPublishSubject = PublishSubject.create(); stringPublishSubject.subscribe(new Observer<String>() { @Override public void onCompleted() { System.out.println("Observable completed"); } @Override public void onError(Throwable e) { } @Override public void onNext(String s) { System.out.println("Observer consumed " + s); } }); stringPublishSubject.onNext("hello world"); stringPublishSubject.onCompleted(); } }
这时候打开Android Studio左边的Structure的面板,可以看到测试用例方法testPublishSubject
右击并运行它,测试通过,返回了正确的值
注意本测试用例试用了System.out.println所以测试结果直接打印在了控制台上,如果把打印的地方换成Log.d()呢,你会发现报错:
这个实际是因为你在java的Unit test中引用了Android的代码,即android.util.log.Log。所以对于测试Android代码,需要在androidTest中
编写Android测试用例
Android测试用例我们可以在androidTest下新建一个java类,并且继承自InstrumentationTestCase
编写一个public void的方法,但是必须要是方法名以test打头,比如testPublishSubject,并不需要@Test注解
public class TestSubject extends InstrumentationTestCase { private static final String LOG_TAG = "test"; public void testPublishSubject() { PublishSubject<String> stringPublishSubject = PublishSubject.create(); stringPublishSubject.subscribe(new Observer<String>() { @Override public void onCompleted() { Log.d(LOG_TAG, "Observable completed"); } @Override public void onError(Throwable e) { } @Override public void onNext(String s) { Log.d(LOG_TAG, "Observer consumed " + s); } }); stringPublishSubject.onNext("hello world"); stringPublishSubject.onCompleted(); } }
本例运行后,会在Android Monitor中以test这个LOGTAG打出和上一节一样的Log
Android Studio也提供了测试单个Activity或者多个Activities的测试用例方法基类,比如ActivityInstrumentationTestCase2,步骤为
在androidTest下新建一个java类,并且继承自ActivityInstrumentationTestCase2,传入需要测试的Activity的类到泛型
复写setUp方法,获得Context
编写一个public void的方法,但是必须要是方法名以test打头,比如testStart,并不需要@Test注解
public class TestActivity extends ActivityInstrumentationTestCase2<MainActivity> { private Context ctx; public TestActivity() { super(MainActivity.class); } @Override protected void setUp() throws Exception { super.setUp(); ctx = getActivity().getApplicationContext(); } public void testStart() { Intent intent = new Intent(ctx, MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); ctx.startActivity(intent); } }
运行这个测试用例,你会发现模拟器上单独启动了这个Activity
其他测试基类
除了InstrumentationTestCase和ActivityInstrumentationTestCase2外,android.test还提供了很多别的测试基类,比如ActivityUnitTestCase
MockApplication
ServiceTestCase
转自:http://www.codeceo.com/article/android-studio-unit-test.html
Android学习交流群:523487222
(如果您觉得有用,欢迎加入,一起学习进步)
点击链接加入群【Android学习群】
相关文章推荐
- Android底层开发之Audio HAL Android Audio Overview
- Android N 完全不同以往的四个新特性
- Android audio设备的定义
- 【Android】几种常见广播监听器(Wifi,亮灭屏,Home键,短信)总结
- 15 个 Android 通用流行框架大全
- 为android系统添加USB AUDIO设备的放音和录音功能
- Android读写SD卡
- Android中Shape 和 Selector的用法
- 越过用户授权使用浮窗
- AndroidAnnotation 在AS中的配置
- 深入了解Android进度条——ProgressBar,SeekBar和RatingBar
- android remote submix 录制系统内置的声音
- Android中,对SQLite的‘批处理’操作
- Android通用流行框架大全
- Android Assests目录遍历
- Android 真机测试无法打印Log日志的解决方案
- android获取应用程序判断是系统程序还是应用程序并且判断在sd卡中还是内存中
- Android Studio ListView(带图像)的使用
- [Android]百度地图开发之SDK开发环境搭建
- Android通用流行框架大全