参考网址:https://blog.csdn.net/qq_23547831/article/details/51868451

本文我们将讲解如何在Android studio中进行单元测试。在Android开发项目中,经常会进行测试操作,而一次又一次的运行模拟器,浪费了大量时间,降低了工作效率降低,虽然最新的Android studio中提供了instance run功能,来提高Android studio的编译速度,但是我们还是需要了解Android studio的单元测试功能,其可以很方便的为我们提供功能性测试,所以如果项目中有用到测试数据的时候,可以先进行单元测试,如果可以正常输出数据了,然后再到UI中执行,这样会提高一些工作效率。

什么是单元测试:

在讲解如何在Android studio中进行单元测试之前我们先普及一下基本知识,即什么是单元测试,这里我先引用一下百科中对单元测试的描述:

是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。

简单来说单元测试就是将一个软件功能拆分成N个最小的不可拆分的单元功能点,对着单元功能点的测试就是单元测试。

单元测试有什么作用:

Android中的测试一般分为:功能测试,ui测试,单元测试等等; 
由于app运行需要Android运行环境,而我们的Android的单元测试一般无法提供运行环境,所以一般像功能测试,UI测试等都需要在模拟器或者是真机上进行,但是一些功能性的需求不需要Android环境的功能,如果也使用Android studio重新编译运行,那么耗费的时间就太长了,一般来说一个apk文件编译,安装,运行的时间一两分钟都是普遍的,三四分钟也可能,这样为了测试一个简单的功能,就需要花费这么长的时间重新编译运行,性价比太低。

因此单元测试主要是功能测试,主要用于测试一些功能性的需求;比如网络请求,比如数据存储等等。

Android studio对单元测试的支持:

新版的Android studio中添加了对单元测试的支持;如图所示:


该目录下编写测试用例即可。

单元测试可以测试那些内容?

这里需要说明的是Android studio的单元测试由于只是模拟Android开发环境,但是其不是真正的Android开发环境,所以不能测试UI功能,不能测试需要硬件支持的功能(比如蓝牙,wifi等),不能测试App跳转等等,那么其可以测试那些内容呢?

测试一些数据性的功能,比如加载网络数据

测试SharedPerferences,测试数据库,测试函数等

工具类的测试,比如验证时间,转化格式,正则验证等等

简单的单元测试用例:

我们来看一下测试用例的写法:

/*** Instrumentation test, which will execute on an Android device.** @see <a href="http://d.Android.com/tools/testing">Testing documentation</a>*/
@MediumTest
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentationTest {@Testpublic void useAppContext() throws Exception {// Context of the app under test.Context appContext = InstrumentationRegistry.getTargetContext();assertEquals("uuch.com.Android_activityanim", appContext.getPackageName());}
}

这是项目创建的默认的单元测试的类,可以看到其和普通的Class类无太多的区别,只是调用了相应的测试API而已,下面我们就自定义一个自己的单元测试类。

编写自定义的测试用例类:

实现测试用例方法

/*** Created by aaron on 16/7/11.* 自定义的单元测试类*/@MediumTest
@RunWith(AndroidJUnit4.class)
public class MTest {@Testpublic void test1() {// Context of the app under test.Context appContext = InstrumentationRegistry.getTargetContext();assertEquals("uuch.com.Android_activityanim", appContext.getPackageName());Log.i("tag", "$$$$$$$$$$$$");assertEquals("result:", 123, 100 + 33);}
}

需要注意的是

测试用例类需要使用注解:@MediumTest和@RunWith(AndroidJUnit4.class)

我们所写的测试用例方法需要添加名称为Test的注解,否则的话,就找不到测试方法。

比如我们去掉注解Test的话:


再次执行的话,就找不到可执行的测试函数了。

还有一个问题,可以发现我们的函数都是这是的public的,如果我们设置我们的测试函数为private的货怎么样呢?修改测试函数

/*** 单元测试,测试函数*/
@Testprivate void test2() {Log.i("tag", "$$$$$$$$$$$$");assertEquals("result:", 123, 100 + 33);}

执行之后可以发现:


报错了,错误说明也很详细,说的是我们的测试函数需要设置为Public的,所以我们在编写测试函数的时候需要注意两点:

测试函数需要为public

测试函数需要添加@Test注解

如何执行测试用例

直接在源码中右键执行
编写完成之后,如何运行呢?


可以选中需要测试的方法名称,然后右击,弹出操作提示框,这是选择run 方法名就可以了,这时候就可以执行该测试方法了。

测试用例里面为我们提供了测试过程中可能需要的系统环境对象


比如:application,context等等;以后我们再次编写单元测试的时候是不是很方便了呢?

Android studio菜单中执行测试用例
- 选择run-edit configuration


- 添加Android tests用例


- 配置tests方法


点击ok,这时候run区域就已经出现了我们刚刚添加的测试用例了


一个简单的单元测试小例子:

说了这么多,我们还是举一个实力的开发例子吧。

情景 
有这样的一种情况,我们在开发过程中需要使用正则表达式验证一个字符串,但是我们想在重新编译Apk之前验证一下这个正则表达式,直接运行项目也可以打,但是太慢了,有什么简单的方式能够验证呢?这时候就可以使用我们的单元测试了。

编码

/*** 单元测试,测试函数*/
@Testpublic void test2() {boolean result = "18210741899".matches("\\d{11}");Log.i("tag", "#####:" + result);/*** 验证邮箱*/assertEquals("result:", result, true);}

执行

这样我们就可以不启动我们的App就验证正则表达式的正确与否了。其中函数assertEquals为断言函数,用于判断结果是否正确,可以看到运行结果:1 test passed,说明我们的函数执行正确,即result为true,所以我们的正则表达式是正确的。

总结:

这样我们经过一系列的操作之后就介绍完了Android studio中进行单元测试的步骤,怎么样?很简单吧,O(∩_∩)O哈哈~

Android studio默认支持单元测试,可以在module下的AndroidTest下编写测试用例

测试用例中提供了获取Context的API,可以通过该方法获取Context对象

测试用例方法需要使用注解@Test表明,否则会报错,找不到测试方法

测试方法需要定义为public,否则报错

有两种执行测试方法的方式,可以直接在源码中右键执行,也可以在Android studio中配置测试方法

执行单元测试会重新执行apk的编译,打包,安装操作,其优势是帮你免去了手动的打开某个页面执行某个操作的步骤。

android studio 单元测试详解相关推荐

  1. Android Studio 插件开发详解二:工具类

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78112856 本文出自[赵彦军的博客] 在插件开发过程中,我们按照开发一个正式的项 ...

  2. Android Studio 插件开发详解四:填坑

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78265540 本文出自[赵彦军的博客] 系列目录 Android Gradle使用 ...

  3. Android Studio 插件开发详解三:翻译插件实战

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78113868 本文出自[赵彦军的博客] 系列目录 Android Gradle使用 ...

  4. Android Studio 插件开发详解一:入门练手

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78112003 本文出自[赵彦军的博客] 系列目录 Android Gradle使用 ...

  5. Android Studio 版本号详解

    Android Studio 版本号详解 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/69951965 本文出自[赵彦军的博客] ...

  6. 视频教程-Android Studio 开发详解-Android

    Android Studio 开发详解 1999年开始从事开发工作,具备十余年的开发.管理和培训经验. 在无线通信.Android.iOS.HTML5.游戏开发.JavaME.JavaEE.Linux ...

  7. Android Studio 安装详解及安装过程中出现的问题解决方案

    Android Studio 安装详解及安装过程中出现的问题解决方案 一,Android Studio安装包下载, 首先到官网下载,就是去Android Studio中文社区官网下载你的平台需要的安装 ...

  8. android组件模板,提高效率必备神器 ---- Android Studio模板详解

    原标题:提高效率必备神器 ---- Android Studio模板详解 Android Studio模板大家应该很熟悉,你新建一个project或者module的时候,AS会帮你提供几个选项供你选择 ...

  9. Android studio入门详解

    1.如何查看Android studio的环境搭建是否成功 首先在Android studio中的sdk manager查看sdk存放位置,如何打开,同时按shirt+ctrl+鼠标右键,如下图: 然 ...

  10. Android Studio 分析器详解

    Android  Profiler分为三大模块: cpu.内存 .网络.基本的使用在上一篇文章有讲到.这里详细说一下. 一. CPU分析器CPU Profiler CPU分析器可帮助您实时检查应用程序 ...

最新文章

  1. 三角测量计算三维坐标的代码_浅谈三维扫描仪的由来
  2. Redis 6 RC1发布,带来众多新特性
  3. 密码学笔记——eval(function(p,a,c,k,e,d) 加密破解
  4. macaca运行报错之chrome-driver问题处理,关闭 Chrome 的自动更新
  5. Ubuntu apt-get和pip源更换
  6. Winform Echarts 显示百度地图的用法(3)
  7. 从头开始学JavaScript (九)——执行环境和作用域
  8. html结构及部分属性——从0开始
  9. 未注册小程序名称-小程序名称大全-周期更新未注册的好名字
  10. PcShare2007 暗桩
  11. cpm,cpc,cps和cpa分别是什么意思
  12. 京东大数据平台进化之路
  13. java ctor_.ctor,.cctor 以及 对象的构造过程
  14. IBM服务器修改时间为24小时制,联想携IBM为用户提供24小时全天候技术支持
  15. 【题解】[POI2005] SZA-Template
  16. pii 400_为什么要加密所有个人身份信息(PII)
  17. 学习MATLAB的第一天,梳理一些见到的函数。1.matlab中sin、cos、tan三角函数问题。2.abs函数。3.vpa函数。4.disp函数。5.class函数。6.logical函数。
  18. iOS app脚手架
  19. 约瑟夫环的两种实现方法
  20. 通过注册表更改Windows网络类型(公共网络、专用网络或家庭网络);

热门文章

  1. 计算机wps函数的使用,职称计算机考试WPS 使用技巧
  2. 揭秘《英雄联盟》的游戏自动化测试
  3. NetworkLocation for WES7
  4. 内网渗透-域管理员定位
  5. mysql msdtc 不支持_MSDTC 服务意外地在 Windows Server 2012 或 Windows Server 2008 R2 SP1 中停止...
  6. Aladdin HASP SRM(AES-128)加密狗破解经验分享
  7. exe图标修改器和EXE文件打不开了的办法
  8. ubuntu 刷新频率 如何查看_ubuntu如何调整显示的分辨率和刷新率?
  9. 天煌计算机组成原理控制软件,天煌THTJZ-2型计算机组成原理课程设计.doc
  10. 360浏览器的html在哪里,360浏览器收藏夹路径在哪里