1. 前言

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

2. 添加单元测试支持

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

2.1 添加单元测试依赖包

    在程序模块下面的build.gradle中需要引入的依赖包:

testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner: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代码功能进行单元测试)

2 添加单元测试类

2.1 手动编写单元测试类

2.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; @Before
public void setUp() throws Exception {
mTargetContext = InstrumentationRegistry.getTargetContext();
} @Test
public 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("", data);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
}
}

2.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 { @Before
public void setUp() throws Exception { } @Test
public void isEmpty() { assertEquals(true, Utils.isEmpty(""));
}
}
2.1.3 测试类中的setUp方法
    在测试类中的setUp方法,可以在启动测试前进行一些初始化,比如测试类中的变量等初始化,这个方法需要添加@Before注解。
说明:
  1. 上面的示例代码中可以直接使用assertEquals,是因为使用了静态import方法引入了相应的包(import static org.junit.Assert.*;)
  2. 根据测试的功能合理使用androidTest和test,提高单元测试效率。

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

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

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

3. 运行单元测试

3.1 运行单个测试方法

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

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

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

在AndroidStudio中使用单元测试的更多相关文章

  1. Visual Studio中UnitTesting单元测试模板代码生成

             在软件研发过程中,单元测试的重要性直接影响软件质量.经验表明一个尽责的单元测试方法将会在软件开发的某个阶段发现很多的Bug,并且修改它们的成本也很低.在软件开发的后期阶段,Bug的发 ...

  2. AndroidStudio中activity实现去掉标题栏

    1.在代码中实现 this.requestWindowFeature(Window.FEATURE_NO_TITLE) 这段代码需要放在setContentView()前面 2.设置在Manifest ...

  3. 真正意义上的spring环境中的单元测试方案spring-test与mokito完美结合

    真正意义上的spring环境中的单元测试方案spring-test与mokito完美结合 博客分类: java 测试 单元测试SpringCC++C#  一.要解决的问题:     spring环境中 ...

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

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

  5. androidStudio中如何加载字体资源?

    在android中字体的格式总是不能尽善尽美的显示出来 ,  于是要求我们使用一些有美感的字体,加载的方式(就像HTML的字体一样),我们需要通过加载字体的方式来使用android中不曾提供的字体; ...

  6. AndroidStudio中 R文件缺失的办法

    AndroidStudio中 R文件缺失 找不到R文件的原因有如下两类: 1:IDE或代码问题,非个人原因: 2:个人误操作导致IDE不予提示R文件: 下面是解决办法: 第一种 ①首先确保资源文件是否 ...

  7. Windows下AndroidStudio 中使用Git(AndroidStudio项目于GitHub关联)

    前提条件 : 1. 安装 Git 客户端 下载链接 2. 有 GitHub 账号 (假设你已经有了一些git基础, 如果还一点都不会, 请去找其他加成学习) AndroidStudio项目发布到Git ...

  8. 在Android Studio中进行单元测试和UI测试

    本篇教程翻译自Google I/O 2015中关于测试的codelab,掌握科学上网的同学请点击这里阅读:Unit and UI Testing in Android Studio.能力有限,如有翻译 ...

  9. Visual Studio 中的单元测试 UNIT TEST

    原文:Visual Studio 中的单元测试 UNIT TEST 注:本文系作者原创,可随意转载,但请注明出处.如实在不愿注明可留空,强烈反对更改原创出处.TDD(Test-Driven Devel ...

随机推荐

  1. 一个SAP顾问的回忆:我过去很胖!

    去年也是这个时候,SAP成都研究院体育界大神邓阳,曾经赏脸在Jerry这个公众号上赐文一篇,介绍了他和围绕在他身边的一群小伙伴们的体育故事:SAP成都研究院的体育故事 而今天文章的主角则是SAP成都研 ...

  2. 【Struts2】拦截器

    一.概述 二.在Struts2中使用拦截器 2.1 步骤 2.2 分析拦截器原理 2.3 关于interceptor与Filter区别: 三.案例 一.概述 介绍拦截器: struts2拦截器使用的是 ...

  3. PAT Advanced 1155 Heap Paths (30 分)

    In computer science, a heap is a specialized tree-based data structure that satisfies the heap prope ...

  4. Sourcetree 出现错误提示git -c diff.mnemonicprefix=false -c core.quotepath=false fetch origin

    具体表现为:sourcetree无法和gitlab远程仓库进行交互,但使用本地cmd,可以使用git命令和远程仓库交互通过各种账户.秘钥等操作,都无法解决该问题具体信息如下: 解决方式:点击 工具–& ...

  5. PyTorch 启程&拾遗

    1..Tensors are similar to NumPy’s ndarrays, with the addition being that Tensors can also be used on ...

  6. 这个是自定义的代码块在xcode中的路径

    ~/Library/Developer/Xcode/UserData/CodeSnippets

  7. jquery 去除 css 的 background-image 样式

    首先我使用了这个: $('#**').css('background-image', null); 没有效果...... 然后我用了这个: $('#staffName').css('backgroun ...

  8. 18-SQLServer中给视图创建索引

    一.注意点 1.索引视图所引用的基表必须在同一个数据库中,不是用union all引用多个数据库的表: 2.创建索引视图时要加上with schemabinding: 3.创建索引视图时要指定表所属的 ...

  9. Java8-Stream-No.10

    import java.util.Arrays; import java.util.IntSummaryStatistics; import java.util.List; import java.u ...

  10. python-platform模块:平台相关属性

    import platform x=platform.machine() #返回平台架构 #AMD64 x=platform.node() #网络名称(主机名) #DESKTOP-KIK668C x= ...