Android studio下gradle Robolectric单元测试配置

android studio下gradle Robolectric单元测试配置

1.Robolectric

Robolectric是一个基于junit之上的单元测试框架。它并不依赖于Android提供的测试功能,它使用了shadow objects并且运行测试于普通的工作站/服务器JVM,不像模拟器或设备需要dexing(Android dex编译器将类文件编译成Android设备上的Dalvik VM使用的格式),打包,部署和运行的过程,大大减少了测试执行的时间。

参考:安卓单元测试相关概述http://www.cnblogs.com/droidpilot/archive/2012/04/27/2473291.html

2.下载as插件

如果是android studio 0.8.9以下的版本,需要按照指示添加额外配置

https://github.com/evant/android-studio-unit-test-plugin

3.编写gradle 配置

项目地址:https://github.com/JCAndKSolutions/android-unit-test

以下是配置的详细说明

buildscript {
  repositories {
        mavenCentral()
        maven {
            url ‘https://oss.sonatype.org/content/repositories/snapshots/‘
        }
    }

    dependencies {
        classpath ‘com.android.tools.build:gradle:0.12.+‘
//        classpath ‘org.robolectric:robolectric-gradle-plugin:0.13.+’
    //引用相关gradle插件
        classpath ‘com.github.jcandksolutions.gradle:android-unit-test:1.6.2‘
    }
}
apply plugin: ‘android-library‘
apply plugin: ‘idea‘
idea {
    module {
    //设置测试类的输出目录
        testOutputDir = file(‘build/test-classes‘)
    }
}
repositories {
    mavenCentral()
    maven {
        url ‘https://oss.sonatype.org/content/repositories/snapshots/‘
    }
}
//由于android studiode 一个bug,必须把module的iml文件中的android sdk引用放到最下面
task pushDownJdkDependency {
//这里是待测试项目的iml文件名
    def imlFile = file("library.iml")
    doLast {
        try {
            def parsedXml = (new XmlParser()).parse(imlFile)
            def jdkNode = parsedXml.component[1].orderEntry.find { it.‘@type‘ == ‘jdk‘ }

            parsedXml.component[1].remove(jdkNode)
//这里是target sdk版本,只需要改数字就行
            new Node(parsedXml.component[1], ‘orderEntry‘, [‘type‘: ‘jdk‘, ‘jdkName‘: "Android API 19 Platform", ‘jdkType‘: ‘Android SDK‘])
            def writer = new StringWriter()
            new XmlNodePrinter(new PrintWriter(writer)).print(parsedXml)
            imlFile.text = writer.toString()

        } catch (FileNotFoundException e) {
            // nop, iml not found
        }
    }
}
//在build之前修改iml文件
gradle.projectsEvaluated {
    preBuild.dependsOn(pushDownJdkDependency)
}
android {
    compileSdkVersion 19
    buildToolsVersion ‘19.1.0‘

    sourceSets {
        main {
            manifest.srcFile ‘AndroidManifest.xml‘
            java.srcDirs = [‘src/main/java‘]
            res.srcDirs = [‘res’]
//指定测试文件所在目录
            androidTest.setRoot(‘src/test‘)
        }
    }
    defaultConfig {
        minSdkVersion 10
        targetSdkVersion 19
        versionCode 2
        versionName "2.0.0"
        testInstrumentationRunner "com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner"
    }
}
//应用插件
apply plugin: ‘android-unit-test‘

dependencies {
    compile ‘com.android.support:support-v4:19.1.0’
//注意,如果https://github.com/evant/android-studio-unit-test-plugin,此插件没有安装,则可能无法识别testCompile语义
//junit:junit和org.robolectric:robolectric是必须项,其他的项目根据实际引用添加
    testCompile ‘junit:junit:4.10‘
    testCompile ‘org.robolectric:robolectric:2.3‘
    testDebugCompile ‘org.debugonly.dependency‘
    testFreeCompile ‘Admob.jar‘
    testCompile ‘org.mockito:mockito-all:1.9.5‘
    testCompile(‘com.squareup:fest-android:1.0.+‘) { exclude module: ‘support-v4‘ }
}

4.运行测试

直接在as的终端里面执行:gradle test 或者./gradlew test 即可

时间: 2024-08-24 21:37:32

Android studio下gradle Robolectric单元测试配置的相关文章

Android Studio 下项目的依赖配置

Android Studio 下项目的依赖配置 背景 项目需要用到一个github上的开源库swipelistview,原来在eclipse环境下配置过相关的依赖(导入jar包或者是lib依赖),但是在Android Studio下还是没有操作过.上网查了一下相关的资料,在stackoverflow上找到了答案.根据上面的介绍,结合实际情况,完成了依赖配置. stackoverflow答案地址 有两种方式来进行依赖配置. 1. 使用aar包(这个不太清楚原理和效果,简单查了一下和maven相关,

Android Studio下gradle环境搭建

在w3c页面上有较为权威的gradle安装教程:上面说1.5 或更高版本的 JDK.Gradle 自带了 Groovy 库.但在执行gradle时候出现 -bash: gradle: command not found 问题. 如果你使用的是Android Studio进行开发,那就不需要再去下载gradle的zip包安装,因为Android Studio中自带了gradle.我们可以通过以下方式在mac环境下帮助电脑找到gradle命令: 1.在Finder中右击Android Studio.

android studio下gradle与Git错误解决方法

Error: Gradle: Execution failed for task ':mytask' > A problem occurred starting process 'command 'jni/ndk-build.cmd" 这是win7打开android程序出现的问题.解决方法:打开build.gradle,找到"commandLine"这行,把commandLine 'ndk-build', '-C', file('jni').absolutePath改为

android studio下gradle与Git出错解决方法

Error: Gradle: Execution failed for task ':mytask' > A problem occurred starting process 'command 'jni/ndk-build.cmd" 这是win7打开android程序出现的问题,解决方法:打开build.gradle,找到"commandLine"这行,把commandLine 'ndk-build', '-C', file('jni').absolutePath改为

Android Studio下运行开源项目9GAG遇到的问题

首先是本地的build-tools版本不是开源项目所使用的,本来Android Studio点击出错提示会自动下载的,但是天朝把google的所有链接都封了,所以你懂的-- 于是到CSDN下载了21.1.1的版本,解压后,文件夹名称换成版本号21.1.1,放到如下路径(具体视各人的安装路径不同而不同) 之后又遇到一个问题,说是Gradle的版本不够新,找了一圈怎么升级Android Studio下Gradle的方法,终于让我找到 此后会等待比较长的一段时间,出现以下信息表示安装成功 之后再运行9

Android Studio下项目构建的Gradle配置及打包应用变体

Gradle简介 ??Gradle是一个自动化构建工具,采用Groovy的Domain Specific Language(领域特定语言)来描述和控制构建逻辑.具有语法简洁.可读性强.配置灵活等特点.基于Intellij IDEA社区版本开发的Android Studio天生支持Gradle构建程序.Groovy是一种基于JVM的敏捷开发语言,结合了Phthon.Ruby和Smalltalk的许多强大特性.同时,Groovy代码既能够与java代码很好地结合,也能够用于扩展现有的代码. Grad

Android Studio下通过Gradle配置实现资源文件的模块化

当开发一个app模块个数很多的时候,资源文件就会特别多,布局也会多起来,这时所有的layout都放在同一个目录下,就会显得臃肿,而且不好找相应的布局. 最近看到相关资料,发现在Android Studio下可以配置多个res目录,用来分割不同的模块. 如下图所示,可以在一个新的模块的res目录下 创建各种资源目录: 当然还可以在res-qa目录下创建 drawable,values等目录 这些资源文件可以和原来的一样直接R文件引用. 上面仅仅是效果,还需要在 build.gradle中进行配置

在Android studio中用gradle打 jar 包(Mac下)

这两天公司要重构项目,以前的项目在eclipse上,准备迁移到Android studio上,需要对项目打包,于是我学习了Android studio中gradle打包的内容.我在公司用的Mac,在家用的Windows,两种平台下,打包基本一样的,这里主要说下在Mac系统下的过程. 在Andorid studio中的Terminal用的是Mac的终端,所以要使用Terminal的gradle命令打包,先要配置下mac中的gradle环境,打开mac上的终端: (1) 输入命令:open .bas

【android studio】 gradle配置成本地离线zip包

原文:[android studio] gradle配置成本地离线zip包 关键词:distributionUrl修改成本地路径,android studio 提速 使用场景,1平常项目:2github上的项目,下载后先修改配置文件再open 一.gradle离线包下载地址: http://android-mirror.bugly.qq.com:8080/gradle/ 二.无需解压: 三.android studio修改成本地路径:(gradle/wrapper/gradle-wrapper.