Android Studio单元测试入门
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 {
@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
github site for this blog
https://github.com/soaringEveryday/BlogRoad/blob/master/Android Studio单元测试入门.md
Android Studio单元测试入门的更多相关文章
- Android初涉及之Android Studio&JAVA入门--二月不能不写东西
是的,我还没有放弃写博客. 是的,我也没有放弃PHP的学习. 是的,我要开始学学最TM火的Android开发了. 你呢 1.Android Studio 一.概况 安装和配置什么的就不具体说了,网上一 ...
- Android Studio 单元测试
在功能测试有时要通过Log来验证,每次编译都需要时间,对于一些功能测试可以用Android Studio自带的单元测试功能进行调试: 在新建项目时,Android studio就已经集成了二个单元测试 ...
- Android Studio 单元测试
测试的种类 按岗位划分 黑盒测试:测试逻辑业务 白盒测试:测试逻辑方法 按测试粒度分 方法测试:function test 单元测试:unit test 集成测试:integration test 系 ...
- Android Studio 使用入门及问题汇总
声明:转载自http://blog.csdn.net/wei_chong_chong/article/details/56280383 之前一直用eclipse+adt做Android开发.曾经尝试使 ...
- eclipse再见,android studio 新手入门教程(一)基本设置
写在前面: 作为一个刚半只脚踏入android开发的新手,在使用eclipse开发了两个自我感觉不甚成熟的商城类app之后,遇到了一些问题,总结为如下: 代码复用性.findviewById,oncl ...
- Android Studio开发入门-引用jar及so文件
作者:王先荣 最近初学安卓开发,因为以前从未用过JAVA,连基本的语法都要从头开始,所以不太顺利.在尝试使用百度语音识别引擎时遇到了如何引用jar及so文件的问题.在GOOGLE加多次尝试之后, ...
- android studio 使用入门 (快捷键等收集)
1. 解决 android studio cannot resolve symbol 1) file->import proj->create proj from exit proj .. ...
- Android Studio 使用入门
Android Studio 快捷键 Action Mac OSX Win/Linux 注释代码(//) Cmd + / Ctrl + / 注释代码(/**/) Cmd + Option + / Ct ...
- [转]Android Studio开发入门-引用jar及so文件
注意: 1.jar包在app的libs目录 2.so文件放在src/main”目录中名为“jniLibs”的目录 一.引用jar文件 1.将jar文件复制.粘贴到app的libs目录中: ...
随机推荐
- [Config]Zabbix的Mongodb插件安装,centos
1.yum install php-devel php-pear httpd-devel 2.安装mongo php驱动,pecl install mongo 3.pecl install mongo ...
- 含有SilverLight项目的代码重用
很多时候,我们工程中不只是有SilverLight项目,然而我们想把其他的项目中的工具类,或者实体类复用到SilverLight项目中时,会发现SilverLight项目无法使用.这是个很普遍的现象. ...
- SQL Server调优系列基础篇(索引运算总结)
前言 上几篇文章我们介绍了如何查看查询计划.常用运算符的介绍.并行运算的方式,有兴趣的可以点击查看. 本篇将分析在SQL Server中,如何利用先有索引项进行查询性能优化,通过了解这些索引项的应用方 ...
- Mac OSX下卸载Nodejs
有时手贱看到新版本就升级,升级后发现一堆模块不能用了,心情好慢慢调,但也有调不好的时候,只能卸载重装低版本的node了. 我的机器环境如下 1. Mac OSX 10.10.3 2. node为0.1 ...
- 微软Nokia 222:可拍照可上网 售价37美元 32GB的microSD卡扩展
腾讯科技讯 8月27日,在几乎所有厂商都在智能手机领域大肆拼杀的时候,微软日前却悄悄地发布了一款功能手机Nokia 222. 目前,尽管全球许多发达国家的居民都对互联网已经再熟悉不过了,但事实上全球依 ...
- STM32F407 RCC时钟配置
新上手项目需要使用STM32F407,在使用STM32F1系列时就喜欢自己用库函数设置系统时钟,所以F4也打算这么做,但是遇到了一些问题. 其中百度文库有篇文章关于RCC的文章将的不错,地址:http ...
- 查看linux系统,服务,配置文件被修改的时间
如何查看服务启动时间 [root@qike /]# ps -ef |grep nginx root 14730 1 0 16:45 ? 00:00:00 nginx: master process / ...
- 贤者时间太久了么?--MySQL继续玩
hi 给自己放了大概三天的假,没有一点点防备,没有一点点准备,无意的 是不是贤者时间过不去了我不知道啊...继续看东西吧 1.MySQL -----运算符和函数----- 字符函数,数值运算符,比较运 ...
- CF 371C-Hamburgers[二分答案]
C. Hamburgers time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- ArrayList实现线程安全的blogs
ArrayList是线程不安全的,轻量级的.如何使ArrayList线程安全? 1.继承Arraylist,然后重写或按需求编写自己的方法,这些方法要写成synchronized,在这些synchro ...