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. c#复制文件夹和文件

    /// <summary> /// 拷贝文件夹 /// </summary> /// <param name="srcdir"></par ...

  2. python实现IP地址转换为32位二进制

    python实现IP地址转换为32位二进制 #!/usr/bin/env python # -*- coding:utf-8 -*- class IpAddrConverter(object): de ...

  3. Dockerfile命令详解

    使用docker就会避免不了的要做各种镜像,就会用到dockerfile,记录一下dockerfile的主要命令 1.主要组成部分     dockerfile执行build命令时,是从上倒下依次执行 ...

  4. 用VNC远程无线站

    用VNC远程无线站 第一步: 远程一台我们可以vnc连接的linux电脑(IP1为实际IP地址) vim /etc/ssh/sshd_config 修改:69行为 X11Forwarding no 为 ...

  5. 深度排序模型概述(二)PNN/NFM/AFM

    在CTR预估中,为了解决稀疏特征的问题,学者们提出了FM模型来建模特征之间的交互关系.但是FM模型只能表达特征之间两两组合之间的关系,无法建模两个特征之间深层次的关系或者说多个特征之间的交互关系,因此 ...

  6. [转]makefile学习

    原文: http://blog.fatedier.com/2014/09/08/learn-to-write-makefile-01/ -------------------------------- ...

  7. Elasticsearch:运用search_after来进行深度分页

    在上一篇文章 "Elasticsearch:运用scroll接口对大量数据实现更好的分页",我们讲述了如何运用scroll接口来对大量数据来进行有效地分页.在那篇文章中,我们讲述了 ...

  8. poj1236 Network of Schools(SCC缩点+结论推导)

    第一问简单不讲. 第二问简化后问题是给一张DAG求最少添加几条边使得DAG变成一个SCC.首先所有中间点(有入度有出度)肯定直接顺着走到无出度点,所以肯定是无出度点连向无入度点. 把无入度点作为点集S ...

  9. keeping

     很多时候我们总是低估了自己,对自己不够狠,从而错过了遇到一个更加优秀的自己.逼自己一把,很多事并不需要多高的智商,仅仅需要你的一份坚持,一个认真的态度,一颗迎难而上的决心 

  10. rontab踩坑(三):crontab定时任务调度机制与系统时间/时区的不一致

    解决方案: 因为我们的服务器在是肯尼亚: 我么查看一下localtime 是否和 时区一致? 可以看到是一致的. 应该是是配置改动后未重启! service crond restart