android studio 2.0创建一个空android moudle后,

会出现两个test目录,其中一个是Instrument Test,

另一个则是Unit Test

Unit Test 和 Instrument Test 的区别:

在 Android Developer 给出的 Instrument Test 解释如下:

Instrumented unit tests are unit tests that run on physical devices and emulators, instead of the Java Virtual Machine (JVM) on your local machine. You should create instrumented unit tests if your tests need access to instrumentation information (such as the target app’s Context) or if they require the real implementation of an Android framework component (such as a Parcelable or SharedPreferences object). Using instrumented unit tests also helps to reduce the effort required to write and maintain mock code. You are still free to use a mocking framework, if you choose, to simulate any dependency relationships. Instrumented unit tests can take advantage of the Android framework APIs and supporting APIs, such as the Android Testing Support Library。

简单的翻译: Instrumented Unit test 是允许在真机或者模拟器上的,而不是运行在本地环境下的虚拟机中。如果在测试时需要使用 instrumentation information(例如 app Context),或者你需要获取 Android 框架的组件(例如 SharedPrederences),这时候你就可以创建一个 instrumented unit test。使用 Instrumented unit test 可以帮助减少编写模拟环境的代码。当然你也可以使用一些 mock 框架。使用 Instrumented unit test 可以很好的利用 Android framework api 和 supporting API。

在 Android Developer 给出的 Local Unit Tests(Unit Test)解释如下:

If your unit test has no dependencies or only has simple dependencies on Android, you should run your test on a local development machine. This testing approach is efficient because it helps you avoid the overhead of loading the target app and unit test code onto a physical device or emulator every time your test is run. Consequently, the execution time for running your unit test is greatly reduced. With this approach, you normally use a mocking framework, like Mockito, to fulfill any dependency relationships.

简单的翻译:如果你的单元测试不依赖Android环境,那么你需要使用一个本地的单元测试,运行在本地的JVM上,这样的话,就有利于你的测试速度,因为加载物理设备是很耗费时间的。你可以使用类似于 Mockito 这种 Java 测试框架。

简单的总结一下是,这些情况适合用 Instrumented unit test :

  • 测试时需要使用 Android api支持
  • 测试时需要使用 Android 中的组件
  • 测试时需要访问 Android 中的特定环境元素(例如 Context)

其他情况优先考虑使用 Unit Test ,因为它的速度要快很多,效率也要高很多。其次,Instrumented unit test 是基于 Unit Test 的。

Unit Test 环境配置:

dependencies {

  testCompile ‘junit:junit:4.12’

  testCompile “org.mockito:mockito-core:1.9.5”

}

编写测试代码:

配置运行:

运行结果:

tip:需要在测试方法前需要添加 @Test 注解

两个知识点学习:

关于 Junit 4 中注解的使用:

  • @Before 被这个注解的方法会阻塞 @Test 注解方法,在 @Test 注解方法前执行,如果存在多个 @Before 方法,执行顺序随机。这个注解的方法主要用来执行一些测试的设置。
  • @After 被这个注解标志的方法,会在所有的 @Test 方法之后执行,主要用来释放资源的操作
  • @Test 被这个注解标志的方法,就是你的测试方法,一个单元测试类可以有多个测试方法。
  • @Test(timeout=) 带参数的 @Test 注解标签,如果方法在参数时间内没有成功完成,则返回失败。
  • @BeforeClass 被这个标签标注的方法,会在Class第一次加载调用,所以你可以在里面执行一个 static 方法,比如一些 static 方法是很费资源的,例如 JDBC 操作。
  • @AfterClass 对应着 @BeforeClass ,你可以进行一些 static 操作之后的资源释放。

Assert 系列方法的使用: 
Junit 提供了一系列的 Assert 重载方法,提供你把预期结果(Object,long,Arrays 等类型)和实际结果进行比较。同时还有一个 AssertThat()方法,提供了一个失败 Message 的输出

Instrumented unit 环境配置:

android {
    defaultConfig {
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
}
dependencies {
    androidTestCompile 'com.android.support:support-annotations:23.0.1'
    androidTestCompile 'com.android.support.test:runner:0.4.1'
    androidTestCompile 'com.android.support.test:rules:0.4.1'
    // Optional -- Hamcrest library
    androidTestCompile 'org.hamcrest:hamcrest-library:1.3'
    // Optional -- UI testing with Espresso
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1'
    // Optional -- UI testing with UI Automator
    androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.1'
}
运行配置:



运行结果:


官方链接:

http://developer.android.com/training/testing/unit-testing/instrumented-unit-tests.html#setup

 

Demo地址:

https://github.com/googlesamples/android-testing/tree/master/unit/BasicUnitAndroidTest

android 单元测试的更多相关文章

  1. Android随笔之——Android单元测试

    在实际开发中,开发android软件的过程需要不断地进行测试.所以掌握Android的单元测试是极其重要的.您应该把单元测试作为Android应用开发周期的一部分,精心编写的测试可以在开发早起帮你发现 ...

  2. Android单元测试实践

    为什么要写单元测试 首先要介绍为什么蘑菇街支付金融这边会采用单元测试的实践.说起来比较巧,刚开始的时候,只是我一个人会写单元测试.后来老板们知道了,觉得这是件 很有价值的事情,于是就叫我负责我们组的单 ...

  3. Android单元测试

    安卓单元测试总结文章,目测主要会cover以下的主题: 什么是单元测试 为什么要做单元测试 JUnit Mockito Robolectric Dagger2 一个具体的app例子实践 神秘的bonu ...

  4. Android单元测试: 首先,从是什么开始

    Android单元测试: 首先,从是什么开始 http://chriszou.com/2016/04/13/android-unit-testing-start-from-what.html 这是一系 ...

  5. Android单元测试之四:仪器化测试

    Android单元测试之四:仪器化测试 仪器化测试 在某些情况下,虽然可以通过模拟的手段来隔离 Android 依赖,但代价很大,这种情况下可以考虑仪器化的单元测试,有助于减少编写和维护模拟代码所需的 ...

  6. Android单元测试之三:使用模拟框架模拟依赖

    Android单元测试之三:使用模拟框架模拟依赖 基本描述 如果是一些工具类方法的测试,如计算两数之和的方法,本地 JVM 虚拟机就能提供足够的运行环境,但如果要测试的单元依赖了 Android 框架 ...

  7. Android单元测试之一:基本概念

    Android单元测试之一:基本概念 简单介绍 单元测试是应用程序测试策略中的基本测试,通过对代码进行单元测试,一方面可以轻松地验证单个单元的逻辑是否正确,另一方面在每次构建之后运行单元测试,可以快读 ...

  8. android单元测试 activity跳转 以及 input 输入后 测试

    Android junit实现多个Activity跳转测试 分类: Android Junit测试2011-11-14 16:49 1601人阅读 评论(2) 收藏 举报 androidjunitla ...

  9. Android 单元测试学习计划

    网上查了一下Android单元测试相关的知识点,总结了一个学习步骤: 1. 什么是单元测试2. 单元测试正反面: 2.1. 重要性 2.2. 缺陷 2.3. 策略3. 单元测试的基础知识: 3.1. ...

  10. 阿里知识储备之二——junit学习以及android单元测试

    一,junit框架 http://blog.csdn.net/afeilxc/article/details/6218908 详细见这篇博客 juit目前已经可以和maven项目进行集成和测试,而且貌 ...

随机推荐

  1. 介绍Ext JS 4.2的新特性的《深入浅出Ext JS》上市

    以用户为中心的时代,应用的界面外观变得越来越重要.然而,很多程序员都缺乏美术功底,要开发出界面美观的应用实属不易.Ext JS的出现,为广大程序员解决了这一难题.它有丰富多彩的界面和强大的功能,是开发 ...

  2. HTML5 Web app开发工具Kendo UI Web中如何绑定网格到远程数据

    在前面的文章中对于Kendo UI中的Grid控件的一些基础的配置和使用做了一些介绍,本文来看看如何将Kendo UI 中的Grid网格控件绑定到远程数据. 众所周知Grid网格控件是用户界面的一个重 ...

  3. Android 拖动View View跟随手指一动

    /** * 拖动View 配合onTouchListener使用 * 设置View的布局属性,使得view随着手指移动 注意:view所在的布局必须使用RelativeLayout 而且不得设置居中等 ...

  4. FFmpeg相关资料

    编译: http://www.jianshu.com/p/147c03553e63 http://www.cocoachina.com/ios/20150514/11827.html http://c ...

  5. C# : CEF操作

    代码挺差的,仅供学习.参考 class CEFGlueLoader { class CefAppImpl : CefApp { protected override void OnBeforeComm ...

  6. sharepoint2013用户切换实现方式

    作为一个刚学sharepoint的新人,今天在账号的切换中烦躁无比,不知道有木有人和我一样,sharepoint2013没有了切换用户,真的很不方便,当然了,也不是没有办法加上去,经过本人一个下午的研 ...

  7. spring mvc的拦截器

    package com.tech.jin.interceptor.method; import java.util.Arrays; import java.util.Map; import java. ...

  8. python 学习笔记十五 django基础

    Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...

  9. sharepoint 增删改查

    前端提交 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="MeetingOneW ...

  10. ORACLE 11g安装

    下载地址 win 32位操作系统 下载地址: http://download.oracle.com/otn/nt/oracle11g/112010/win32_11gR2_database_1of2. ...