1. 前言

在Android开发中,如果对一个简单的功能,每次修改代码都重新运行到设备中进行测试,会浪费大量时间,降低开发工作效率。如果使用单元测试,编写单元测试类,执行测试单元测试类就可以对某些功能进行测试,大大提升了开发工作效率。

2. 添加单元测试支持

在AndroidStudio项目中,如果是新版本的AndroidStudio中新建的,会自动添加了单元测试的支持,如果旧项目,没有添加单元测试支持,需要手动进行配置。

2.1 添加单元测试依赖包

在程序模块下面的build.gradle中需要引入的依赖包:
testImplementation ‘junit:junit:4.12’
androidTestImplementation ‘com.android.support.test?1.0.2’
androidTestImplementation ‘com.android.support.test.espresso:espresso-core:3.0.2’
testImplementation-引入的依赖是java unit单元测试,是运行在当前电脑的jvm上的单元测试;
androidTestImplementation-引入的依赖是Android单元测试,是运行在Android环境的单元测试。

2.2 添加测试代码目录

如果AndroidStudio当前项目视图为Android,需要切换为Project视图,在程序模块下面的src目录下添加androidTest/java(Android单元测试,运行在Android环境的单元测试)和test/java(JUnit单元测试,运行在当前电脑的jvm上的单元测试),然后在里面添加包名和测试类。


androidTest/java(Android单元测试,运行在当前电脑的jvm上的单元测试,执行测试的时候需要Android连接设备,速度比较慢,适合需要调用Android api的单元测试)
test/java(JUnit单元测试,用来放不需要Android依赖的单元测试类,运行在当前电脑的jvm上的单元测试,速度快,适合只是对java代码功能进行单元测试)

3 添加单元测试类

3.1 手动编写单元测试类

3.1.1 androidTest测试类

androidTest测试类适用于需要依赖Android api的单元测试,需要连接Android设备才能进行测试。新建的androidTest java类需要添加@RunWith(AndroidJUnit4.class)注解,类的方法如果是测试入口方法需要添加@Test注解。
示例代码:

package com.xiaoying.untitestdemo;import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.test.InstrumentationRegistry;import org.junit.Before;
import org.junit.Test;import static org.junit.Assert.assertEquals;/*** Created by yinglovezhuzhu@gmail.com on 2018/5/13.*/
public class MainActivityTest {private Context mTargetContext;@Beforepublic void setUp() throws Exception {mTargetContext = InstrumentationRegistry.getTargetContext();}@Testpublic void onCreate() {try {ApplicationInfo applicationInfo = mTargetContext.getPackageManager().getApplicationInfo(mTargetContext.getPackageName(), PackageManager.GET_META_DATA);Bundle metaData = applicationInfo.metaData;String data = metaData.getString("com.xiaoying.TEST");assertEquals("1234567890", data);} catch (PackageManager.NameNotFoundException e) {e.printStackTrace();}}
}

3.1.2 test测试类

test测试类适用于纯java的单元测试,运行于当前设备的jvm环境中,无需Android设备即可测试。新建test java类,类的方法如果是测试入口方法需要添加@Test注解。
代码示例:

package com.xiaoying.untitestdemo;import org.junit.Before;
import org.junit.Test;import static org.junit.Assert.*;/*** Created by yinglovezhuzhu@gmail.com on 2018/5/13.*/
public class UtilsTest {@Beforepublic void setUp() throws Exception {}@Testpublic void isEmpty() {assertEquals(true, Utils.isEmpty(""));}
}

3.1.3 测试类中的setUp方法

在测试类中的setUp方法,可以在启动测试前进行一些初始化,比如测试类中的变量等初始化,这个方法需要添加@Before注解。

说明:
上面的示例代码中可以直接使用assertEquals,是因为使用了静态import方法引入了相应的包(import static org.junit.Assert.*;)
根据测试的功能合理使用androidTest和test,提高单元测试效率。

3.2 自动生成测试类和测试方法

上面介绍的是手动添加测试类和测试方法,以下介绍自动生成测试类和方法。在项目源码中选中需要添加单元测试的类并打开,在内容显示区域“右键”->“Go To”,在弹出窗口中选择“Test”,在弹出窗口中选择“Create New Test …”

在接下来弹出的对话框中,勾选需要添加单元测试的方法,在这里有个“Generate”通用方法生成,可以选择setUp/@Before(启动前调用,可用于初始化)和tearDown/@After(结束后调用)

4. 运行单元测试

4.1 运行单个测试方法

在测试方法题内部,“右键”,在弹出菜单中选择“Run 方法名”即可(单元测试也可以使用断点调试和性能调试)。

4.2 批量运行测试方法(有些情况下可能会无法实现)

在终端使用gradle运行test任务,可以执行所有的单元测试方法(在AndroidStudio的Terminal运行gradlew test,在系统终端中运行gradle -p 项目路径 test,gradle没有配置环境变量,需要绝对路径),运行完成后,就会运行所有的单元测试方法,并且会显示结果,如下图:

Android单元测试一:单元测试入门相关推荐

  1. android真机单元测试,Android 单元测试入门

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? Unit Test Start 简单了解一下,如何依赖 Junit 进行 Java 代码的单元测试.依旧如何借助 Rob ...

  2. 在Android中进行单元测试遇到的问题

    问题1.Cannot connect to VM  socket closed 在使用JUnit进行测试的时候,遇到这个问题.网上的解释是:使用Eclipse对Java代码进行调试,无论是远程JVM还 ...

  3. Android下的单元测试

    Android下的单元测试也比较简单,请参照以下步骤: 修改AndroidManifest.xml文件,添加Instrument字段: <instrumentationandroid:name= ...

  4. ju 单元测试_junit4单元测试

    java中Junit单元测试 Junit元测试 单元测试(junit testing),是指对软件中的最小可测试单元进行检查和验证.Java里单元指一个类. JUnit ,是一个开源的Java单元测试 ...

  5. Android应用基础开发入门

    本文写给Android小白,起步入门参考,不过还是喜欢从原理上尽量多讲一点东西. 本文从以下四个方面展开,重点介绍前3节: 第一节:什么是apk? 第二节:android开发 工具介绍 第三节:我们开 ...

  6. Android MVP架构从入门到精通-真枪实弹

    Android MVP架构从入门到精通-真枪实弹 一. 前言 二. MVC架构 1. MVC架构优缺点 A. 缺点 B. 优点 三. MVP架构 1. MVP架构优缺点 A. 缺点 B. 优点 四. ...

  7. 高质量的单元测试 Spock单元测试框架详讲

    文章目录 方法篇 为什么需要单元测试 单元测试的定义 单元测试与其他测试的区别 单元测试的作用 关于单元测试的成本 如何写好单元测试 什么场景适合单元测试 单元测试的粒度 关于TDD TDD的三定律 ...

  8. flex+android+教程,android开发flex4.5入门教程.pdf

    android开发flex4.5入门教程 中国矿业大学教务部 教务通知(2013 )第33 号 关于做好各级"大学生创新训练计划" 项目中期检查和结题验收的通知 各学院: 为加强我 ...

  9. Android 音视频开发入门指南

    最近收到很多网友通过邮件或者留言说想学习音视频开发,该如何入门,我今天专门写篇文章统一回复下吧. 音视频这块,目前的确没有比较系统的教程或者书籍,网上的博客文章也都是比较零散的,希望我后面能挤出时间整 ...

  10. android自定义美颜相机完整程序,Android OpenGL ES从入门到进阶(一)—— 五分钟开发一款美颜相机...

    源码链接:https://github.com/smzhldr/AGLFramework 一.前言 商店里有数十款的美颜相机类产品,其实现原理基本上都是以OpenGL ES为核心的特效处理,大神可以忽 ...

最新文章

  1. UVa 10820 (打表、欧拉函数) Send a Table
  2. BUUCTF-Reverse:helloword + findit(安卓逆向)
  3. 高等数学回顾.pptx
  4. phython在file同时写入两个_轻松支撑百万级数据点写入 京东智联云时序数据库HoraeDB架构解密...
  5. 小学计算机三年级课程目录,小学生信息技术课本目录.doc
  6. Windows Phone 7 不温不火学习之《Expression Blend 创建渐变效果和创建Storyboard动画》...
  7. .Net_asp.net页面的生命周期
  8. mysql查看autocommit_我所理解的MySQL(四)事务、隔离级别及MVCC
  9. 指针c语言有什么作用,c语言中指针有什么用?
  10. 【只摘金句】Linux 开发模式带给创业者的启示
  11. 示例:波士顿房价预测
  12. OPENSSL EVP_AES部分翻译
  13. 一键seo提交收录_SEO学习的作用,及SEO学习操作步骤!
  14. php在foreach循环后留下数组的引用问题
  15. 在Z-stack中,我们调用数据发送函数,可以发送的最大字节数即ASDU最大是多少呢?
  16. 模块电路选型(7)----人机交互模块
  17. ElasticSearch聚合
  18. SGM58031的IIC接口调试过程
  19. Java进阶 主键和外键的使用区别
  20. Unity应用自带UGUI与EPPlus库制作自制Excel(.xlsx)操作程序

热门文章

  1. chatgpt简单的问答机器人
  2. MAC 活动监视器部分状态缺失
  3. LeetCode 2108. 找出数组中的第一个回文字符串
  4. 组播地址MAC的计算
  5. URI RUL和URN的区别(看不懂?)
  6. 推荐一些不常见的搜索引擎
  7. 记录一些工作用的软件
  8. 4.网络配置与系统管理
  9. Vue移动端系列 => [07] 文章详情
  10. 快速搭建日志系统——ELK STACK