Android单元测试一:单元测试入门
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单元测试一:单元测试入门相关推荐
- android真机单元测试,Android 单元测试入门
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? Unit Test Start 简单了解一下,如何依赖 Junit 进行 Java 代码的单元测试.依旧如何借助 Rob ...
- 在Android中进行单元测试遇到的问题
问题1.Cannot connect to VM socket closed 在使用JUnit进行测试的时候,遇到这个问题.网上的解释是:使用Eclipse对Java代码进行调试,无论是远程JVM还 ...
- Android下的单元测试
Android下的单元测试也比较简单,请参照以下步骤: 修改AndroidManifest.xml文件,添加Instrument字段: <instrumentationandroid:name= ...
- ju 单元测试_junit4单元测试
java中Junit单元测试 Junit元测试 单元测试(junit testing),是指对软件中的最小可测试单元进行检查和验证.Java里单元指一个类. JUnit ,是一个开源的Java单元测试 ...
- Android应用基础开发入门
本文写给Android小白,起步入门参考,不过还是喜欢从原理上尽量多讲一点东西. 本文从以下四个方面展开,重点介绍前3节: 第一节:什么是apk? 第二节:android开发 工具介绍 第三节:我们开 ...
- Android MVP架构从入门到精通-真枪实弹
Android MVP架构从入门到精通-真枪实弹 一. 前言 二. MVC架构 1. MVC架构优缺点 A. 缺点 B. 优点 三. MVP架构 1. MVP架构优缺点 A. 缺点 B. 优点 四. ...
- 高质量的单元测试 Spock单元测试框架详讲
文章目录 方法篇 为什么需要单元测试 单元测试的定义 单元测试与其他测试的区别 单元测试的作用 关于单元测试的成本 如何写好单元测试 什么场景适合单元测试 单元测试的粒度 关于TDD TDD的三定律 ...
- flex+android+教程,android开发flex4.5入门教程.pdf
android开发flex4.5入门教程 中国矿业大学教务部 教务通知(2013 )第33 号 关于做好各级"大学生创新训练计划" 项目中期检查和结题验收的通知 各学院: 为加强我 ...
- Android 音视频开发入门指南
最近收到很多网友通过邮件或者留言说想学习音视频开发,该如何入门,我今天专门写篇文章统一回复下吧. 音视频这块,目前的确没有比较系统的教程或者书籍,网上的博客文章也都是比较零散的,希望我后面能挤出时间整 ...
- android自定义美颜相机完整程序,Android OpenGL ES从入门到进阶(一)—— 五分钟开发一款美颜相机...
源码链接:https://github.com/smzhldr/AGLFramework 一.前言 商店里有数十款的美颜相机类产品,其实现原理基本上都是以OpenGL ES为核心的特效处理,大神可以忽 ...
最新文章
- UVa 10820 (打表、欧拉函数) Send a Table
- BUUCTF-Reverse:helloword + findit(安卓逆向)
- 高等数学回顾.pptx
- phython在file同时写入两个_轻松支撑百万级数据点写入 京东智联云时序数据库HoraeDB架构解密...
- 小学计算机三年级课程目录,小学生信息技术课本目录.doc
- Windows Phone 7 不温不火学习之《Expression Blend 创建渐变效果和创建Storyboard动画》...
- .Net_asp.net页面的生命周期
- mysql查看autocommit_我所理解的MySQL(四)事务、隔离级别及MVCC
- 指针c语言有什么作用,c语言中指针有什么用?
- 【只摘金句】Linux 开发模式带给创业者的启示
- 示例:波士顿房价预测
- OPENSSL EVP_AES部分翻译
- 一键seo提交收录_SEO学习的作用,及SEO学习操作步骤!
- php在foreach循环后留下数组的引用问题
- 在Z-stack中,我们调用数据发送函数,可以发送的最大字节数即ASDU最大是多少呢?
- 模块电路选型(7)----人机交互模块
- ElasticSearch聚合
- SGM58031的IIC接口调试过程
- Java进阶 主键和外键的使用区别
- Unity应用自带UGUI与EPPlus库制作自制Excel(.xlsx)操作程序