问题:

你想要测试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. Tomcat日志、项目中的log4j日志、控制台——我的日志最后到底跑哪去了?

    1.Tomcat自带日志功能,即时你的项目中有log4j也不会影响到Tomcat自己记录日志. 2.你的项目中的log4j中的日志指定打印到什么地方(控制台或者文件),便会打印到什么地方,和Tomat ...

  2. 为何 IntelliJ IDEA 比 Eclipse 更好

    http://www.oschina.net/news/26929/why-intellij-is-better-than-eclipse圣战 有一些没有唯一正确答案的“永恒”的问题,例如哪个更好:是 ...

  3. 欧洲顶级音频播放软件AIMP

    http://zmingcx.com/europes-top-software-aimp-audio-player.html 音频播放软件众多,耳熟能详的Winamp.Foobar2000.千千静听. ...

  4. 点滴积累【C#】---错误日志记录到txt文本里。

    效果: 描述:将系统中的错误信息,try catch到日志里面. 代码: [后端代码] using System; using System.Collections.Generic; using Sy ...

  5. Android Studio怎样查看branch列表及切换branch

    针对Android Studio的系列文章,都是一个小问题为一篇,并没有整理到一起,主要是方便大家依据自己的须要来查找,同一时候为了便于大家理解,都会直接上图. 我这里使用的版本号控制工具是git,由 ...

  6. tensorflow 之模型的保存与加载(三)

    前面的两篇博文 第一篇:简单的模型保存和加载,会包含所有的信息:神经网络的op,node,args等; 第二篇:选择性的进行模型参数的保存与加载. 本篇介绍,只保存和加载神经网络的计算图,即前向传播的 ...

  7. jquery实现页面的搜索功能

    $(function(){ $("input[type=button]").click(function(){ var txt=$("input[type=text]&q ...

  8. 0051 MyBatis关联映射--多对多关系

    用户与订单时一对多关系,再加上商品信息的话,订单与商品之间就是多对多关系了 DROP DATABASE IF EXISTS testdb; USE testdb; /*用户表,记录用户信息:用户与订单 ...

  9. O(1)取Queue中的最大值

    实现原理: 1.利用Stack的先进后出的特性,实现一个MaxStack,MaxStack中用一个Stack记录当前的值,一个Stack记录当前的最大值. 2.用2个MaxStack实现MaxQueu ...

  10. java全局变量使用

    1.在多线程的作用下,全局变量可能被多个程序使用,如果有人修改,全局变量就被修改了,导致别人使用的时候,出现问题 2.解决方法: 全局变量改为私有变量. 或者把全局变量改为final类型,只能读取,不 ...