博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android Studio单元测试入门
阅读量:5172 次
发布时间:2019-06-13

本文共 3960 字,大约阅读时间需要 13 分钟。

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中应该是这样的:

project structure

编写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
stringPublishSubject = PublishSubject.create(); stringPublishSubject.subscribe(new Observer
() { @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

java structure

右击并运行它,测试通过,返回了正确的值

java result

注意本测试用例试用了System.out.println所以测试结果直接打印在了控制台上,如果把打印的地方换成Log.d()呢,你会发现报错:

java error

这个实际是因为你在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
stringPublishSubject = PublishSubject.create(); stringPublishSubject.subscribe(new Observer
() { @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,步骤为

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

你可能感兴趣的文章
HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别
查看>>
深度学习之前馈神经网络(前向传播和误差反向传播)
查看>>
IEnumerable<T>和IQueryable<T>区别
查看>>
(转)MFC界面风格
查看>>
Centos7 tmux1.6 安装
查看>>
二叉树(三)
查看>>
linux加密文件系统 fsck 无法修复一例
查看>>
【linux配置】VMware安装Redhat6.5
查看>>
AI自主决策——有限状态机
查看>>
iframe父子窗口取值
查看>>
利用Python进行数据分析_Pandas_数据结构
查看>>
《计算机组成原理》第6章:总线
查看>>
关于String str =new String("abc")和 String str = "abc"的比较
查看>>
Android软件架构及子系统介绍
查看>>
Java命名规范
查看>>
小学生算术
查看>>
BZOJ2823: [AHOI2012]信号塔
查看>>
mysql查询前几条记录
查看>>
java二分法查找实现代码
查看>>
体系编程、SOC编程那些事儿
查看>>