问题:

你想要测试app中的非android部分。

解决方案:

可以使用Android Studio1.1里面增加的单元测支持和Android的Gradle插件。

讨论:

ADT插件只支持集成测试,并且要求开发者创建一个单独的测试项目。转化到Android Studio和Gradle的其中一个好处就是支持在android项目内进行测试。

在AndroidStudio1.1之前和相关的Gradle插件,这些测试仍然被限制集成测试,意味着,你需要一个模拟器或者连接的设备才能进行测试。集成测试可以非常强大和有用,是5.3和5.4节的一部分。

这节讨论的是真正的单元测试,就是排在开发机器本地的JVM上的。不像集成测试那样使用androidTest资源文件夹,单元测试在src/test/java目录下面。

当你使用Android Studio新建一个Android项目时,一个示例的单元测试已经为你提供。它在src/test/java树下,但是不在classpath下面:

生成的测试如下:

这类测试对于任何使用过Junit的java开发者都应该熟悉。Junit4的@Test注解表示addition_isCorrect 方法是一个而测试方法。assertEquals方法是Assert类里面的静态方法(注意使用static的import引入所有的静态方法),第一个参数是正确的答案,第二个参数是实际的测试值。

为了运行测试,你需要做的是在Build Variants视图下选择Test Artifact:

通过选择“Unit Tests”,src/test/java目录树被Android Studio识别用于包含测试资源,com/oreilly/helloworld数被包含在包下面。

在执行单元测试之前的最后一步。你需要确认Junit被包含在testCompile里面。如下:

你现在可以使用Gradle的test运行的测试:

为每个变体运行一个测试,在app/build/reports/tests目录下面生成HTML:

在目录下面打开index.html文件,报告如下图:

你可以下钻到ExampleUnitTest类下面,看具体的结果:

可以使用--tests标识限制测试只测试一个变体,甚至一个测试类:

变体任然被构建,但是只有指定的那个,并且只有在ExampleUnitTest类里面的测试才被运行。

你也可以选择右击测试,在Android Studio里面运行它。但是它只为当前的变体,提供了一个漂亮的结果展示:

唯一的问题是,它没有运行任何有意义的东西。这就是关键。当使用JUnit支持的时候,你不能测试任何依赖于Android SDK的东西。JUnit测试只支持那些应用中纯JAVA部分。

在4.5节,library连接网络服务,下载JSON数据,解析,并且更新TextView的值。如果你喜欢,你可以测试过程的一部分:

好消息是单元测试非常快,至少相对于集成测试,因为它们不需要部署到真机或者模拟器上面。如果你有不依赖于Android类的java类,单元测试是一个非常好的途径来确保它们顺利工作。测试驱动的开发在移动世界还没有像在常规的java世界里面一样被接受,但是它是一个好的开始。

补充:

Robolectric 项目被设计用来不使用模拟器或者连接设备来运行集成测试,它表现的像一个Android SDK的mock。很多人对它的看法不是很一致。

Android开发:《Gradle Recipes for Android》阅读笔记(翻译)5.1——单元测试的更多相关文章

  1. Android开发工具全面转向Android Studio(3)——AS project/module的目录结构(与Eclipse对比)

    如果AS完全还没摸懂的,建议先看下Android开发工具全面转向Android Studio(2)——AS project/module的CRUD. 注:以下以Windows平台为标准,AS以目前最新 ...

  2. Android开发工具全面转向Android Studio(2)——AS project/module的CRUD

    本文有些地方可能需要衔接Android开发工具全面转向Android Studio(1)——准备开发环境,读起来效果会更好. 这个世界很奇妙,所有的东西离不开CRUD,即增删改查.即使人本身也遵循这个 ...

  3. 配置cordova的android开发环境(无android studio)

    原文:配置cordova的android开发环境(无android studio) 趁元旦放假想试一下cordova,不想安装庞大的android studio,所以想最小化安装,居然花了一整天的时间 ...

  4. 收集整理Android开发所需的Android SDK、开发中用到的工具、Android开发教程、Android设计规范,免费的设计素材等。

    AndroidDevTools Android Dev Tools官网地址:www.androiddevtools.cn 收集整理Android开发所需的Android SDK.开发中用到的工具.An ...

  5. Eclipse搭建Android开发环境并运行Android项目

    Eclipse搭建Android开发环境并运行Android项目 (详细) 安装环境: window 10 64位 安装工具: JDK.Eclipse.SDK.ADT 安装步骤: 1.JAVA JDK ...

  6. Android开发:《Gradle Recipes for Android》阅读笔记(翻译)6.2——DSL文档

    问题: 你需要查找Android Gradle DSL的完整文档. 解决方案: 访问Gradle Tools网站,从Android开发网站下载ZIP文件. 讨论:Android开发网站首页有完整的AP ...

  7. Android开发:《Gradle Recipes for Android》阅读笔记(翻译)2.3——用Eclipse ADT导出App

    问题: 想在一个已经存在的Eclipse ADT的项目中使用Gradle 解决方案: Eclipse ADT插件可以帮助生成Gradle文件 讨论: Eclipse的ADT插件是在2013年推出Gra ...

  8. Android开发:《Gradle Recipes for Android》阅读笔记1.2

    在android开发中会需要配置使用app的android SDK的最低版本和目标版本,这个是bulidl.gradle的android模块设置.默认有以下几个设置: applicationId,这个 ...

  9. Android开发:《Gradle Recipes for Android》阅读笔记(翻译)4.5——使用Android Libraries

    问题: 你想要在app当中增加新的library模块 解决方案: 使用library插件,增加一个library模块作为依赖. 讨论: 不可以通过使用java库给app增加许多功能,通常是使用jar包 ...

随机推荐

  1. Visual studio之C#跨线程调用UI控件

    背景 当前串口通讯项目,多个线程需要同时利用richTextBoxMsg控件打印信息,直接调用会造成线程不安全,严重的时候会直接导致UI线程挂掉,因此本篇就跨线程调用UI控件做个记录. 正文 定义控件 ...

  2. C#创建COM组件供VB,PB,Delphi调用

    1  COM组件概述 COM是微软公司为了计算机工业的软件生产更加符合人类的行为方式开发的一种新的软件开发技术.在COM构架下,人们可以开发出各种各样的功能专一的组件,然后将它们按照需要组合起来,构成 ...

  3. C语言-二进制技巧

    打开位: flags = flags | MASK 要打开的位为 1 关闭位: flags = flags & ~MASK 要关闭的位为 1 转置位: flags = flags ^ MASK ...

  4. 模拟循环单击事件实现layout中间panel全屏

    jquery提供了toggle方法 toggle() 方法切换元素的可见状态. 如果被选元素可见,则隐藏这些元素,如果被选元素隐藏,则显示这些元素. 语法 $(selector).toggle(spe ...

  5. angularJS 状态样式绑定

    angularJS提供输入框不同状态下的样式绑定 输入框有4种状态 ng-model 指令可以为应用数据提供状态值(invalid, dirty, touched, error): <!DOCT ...

  6. EF 表联合查询 join

    有两张表m_Dept.m_User,联合查询 linq方式.EF方式 private void Add() { List<m_Dept> lst = new List<m_Dept& ...

  7. hihoCoder[Offer收割]编程练习赛1题目解析

    题目1 : 九宫 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描写叙述 小Hi近期在教邻居家的小朋友小学奥数.而近期正好讲述到了三阶幻方这个部分,三阶幻方指的是将1~9不反 ...

  8. linux下的which

    which命令用来查找并打印可执行文件的绝对路径. 他会根据PATH环境变量定义的路径来依此查找可执行文件. 需要注意的是,指向可执行文件的链接文件在查找中会被忽略. 比如env命令: ll /usr ...

  9. nyoj 742 子串和再续 类似 HDU 1024

    子串和再续 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 给你一个序列 S1, S2, S3, S4 ... Sx, ... Sn (1 ≤ x ≤ n ≤ 1,000 ...

  10. man手册页

    man手册页不同页对应的内容: 区段1:用户指令区段2:系统调用区段3:程序库调用区段4:设备区段5:文件格式区段6:游戏区段7:杂项区段8:系统指令区段9:内核内部指令区段n:Tcl或Tk指令