Android Studio单元测试入门

通常在开发Android app的时候经常会写一些小函数并验证它是否运行正确,通常做法我们是把这个函数放到某个界面(Activity上)执行一下,运行整个工程跑一下app,通过打log的方式来验证。不过,现在我们活用Android Studio自带的单元测试功能即可免除这种麻烦,直接写测试用例像Junit那样来验证你的小函数

内容提要

  • 配置
  • 编写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 {@Testpublic void testPublishSubject() {PublishSubject<String> stringPublishSubject = PublishSubject.create();stringPublishSubject.subscribe(new Observer<String>() {@Overridepublic void onCompleted() {System.out.println("Observable completed");}@Overridepublic void onError(Throwable e) {}@Overridepublic 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测试用例我们可以

  1. 在androidTest下新建一个java类,并且继承自InstrumentationTestCase
  2. 编写一个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>() {@Overridepublic void onCompleted() {Log.d(LOG_TAG, "Observable completed");}@Overridepublic void onError(Throwable e) {}@Overridepublic 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,步骤为

  1. 在androidTest下新建一个java类,并且继承自ActivityInstrumentationTestCase2,传入需要测试的Activity的类到泛型
  2. 复写setUp方法,获得Context
  3. 编写一个public void的方法,但是必须要是方法名以test打头,比如testStart,并不需要@Test注解

public class TestActivity extends ActivityInstrumentationTestCase2<MainActivity> {private Context ctx;public TestActivity() {super(MainActivity.class);}@Overrideprotected 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

github site for this blog
https://github.com/soaringEveryday/BlogRoad/blob/master/Android%20Studio%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95%E5%85%A5%E9%97%A8.md

转载请注明
http://www.cnblogs.com/soaringEveryday/p/5461970.html

转载于:https://www.cnblogs.com/soaringEveryday/p/5461970.html

Android Studio单元测试入门相关推荐

  1. android studio单元测试插件,Android Studio单元测试插件下载

    Android Studio单元测试插件是一款可以解决testcompile依赖问题的Android Studio插件,可以帮助用户们在Android Studio进行单元测试,有需要的朋友就来IT猫 ...

  2. 关于Android Studio单元测试中“Method d in android.util.Log not mocked.”问题的解决。

    关于Android Studio单元测试中"Method d in android.util.Log not mocked."问题的解决. 点开链接 这就是解决方案.(这主要是由于 ...

  3. Android Studio 基础入门笔记

    Android Studio 基础入门笔记 Android Studio 基础入门笔记 为什么选择使用 Android Studio 而不是EclipseADT 安卓配置JDK AS如何更新 常规的 ...

  4. Android Studio 使用入门及问题汇总

    声明:转载自http://blog.csdn.net/wei_chong_chong/article/details/56280383 之前一直用eclipse+adt做Android开发.曾经尝试使 ...

  5. Android单元测试读写文件,Android Studio单元测试:读取数据(输入)文件

    根据android-gradle-plugin版本: 1.版本1.5和更高版本: 只需把json文件到src / test / resources / test.json并引用它 classLoade ...

  6. Android Studio插件开发入门篇

    转载自:http://blog.csdn.net/qq_27258799 https://blog.csdn.net/qq_27258799/article/details/78093734 前言 本 ...

  7. SuperMap iMobile+Android studio开发入门(二)——超图示例代码运行

    背景:这里运行的是"产品入门"的"基于Android studio开发移动GIS程序"的"开发三维移动GIS程序",本篇对超图帮助文档进行了 ...

  8. SuperMap iMobile+Android studio开发入门(一)——环境配置

    背景:开发管线的安卓app,功能初步定为三维显示,属性查询和属性修改. (本文属于小白记录贴,会尽量详细,可供有同样需求的人参考,有问题欢迎留言交流.) 使用软件: SuperMap iMobile ...

  9. android studio 学习入门篇

    开发第一应用 可以开发属于自己的应用,是否有点小激动?好吧!让我们开始,首先点击Start a new Android Studio Project创建工程: 接下来需要输入应用名称(第一个字母要大写 ...

  10. Android Studio开发入门-引用jar及so文件

    最近初学安卓开发,因为以前从未用过JAVA,连基本的语法都要从头开始,所以不太顺利.在尝试使用百度语音识别引擎时遇到了如何引用jar及so文件的问题.在GOOGLE加多次尝试之后,找到了一个比较简单的 ...

最新文章

  1. java分享第五天(数组)
  2. Android之ADB常用命令
  3. python计算程序运行时间
  4. 201521123050 《Java程序设计》第13周学习总结
  5. java api教程_Java api 入门教程 之 JAVA的文件操作
  6. LINUX修改path环境变量
  7. 3.22全局参数的保存_补作业来啦~~
  8. Android恶意样本分析——frida破解三层锁机样本
  9. 软件测试需要学什么?全网最全软件测试必备7大技能详解,摇身一变资深测试
  10. Medical robotics-Regulatory, ethical, and legal considerations for increasing levels of autonomy
  11. 新南威尔士大学计算机博士申请,2020年新南威尔士大学博士申请时间
  12. android3d画廊自动切换,Android实例(一)—— 3D画廊
  13. Portapack应用开发教程(十五) APRS接收
  14. mysql中联合索引abc 使用bac_mysql 联合索引
  15. pl/sql中创建存储过程并执行
  16. vite+element-plus项目基础搭建
  17. [附源码]java毕业设计超市订单管理系统
  18. 原创深度精华好文,网络是如何工作的?建议静下心好好看,收获会颇丰!
  19. 【零基础Eviews实例】00了解多元线性回归模型常见检验
  20. Linux系统安装hadoop教程

热门文章

  1. L3_08——图中所有边都是相等的常数
  2. 羞,Spring Bean 初始化/销毁竟然有这么多姿势
  3. Apache Commons Lang3 常用工具类库
  4. Java 设计模式 之 模板方法模式(Template Method)
  5. Spring Boot 2.x 切换 Servlet 嵌入式容器 Tomcat、Jetty、Undertow
  6. 基于计算机 中学数学教学,计算机辅助中学数学教学的研究
  7. 回归分析beta值的标准_多因子建模:回归法和打分法
  8. 阶段5 3.微服务项目【学成在线】_day01 搭建环境 CMS服务端开发_11-MongoDb入门-安装Mongodb数据库...
  9. 跨域请求解决方法(JSONP, CORS)
  10. Oracle实例解析:编码与字符集