[英]Writing Gradle script to run unit test cases for Eclipse Android Test project
我有一个简单的HelloWorld Android项目(在Eclipse IDE中构建),我能够在此项目的cmd提示符下成功完成“渐变构建”。
我也为此编写了一个简单的JUnit Android测试项目,它在Eclipse中运行良好。
现在,我想使用Gradle脚本运行该测试项目或单元测试用例(如果我的理解是错误的!)。 我怎么做?
以下是我正在使用的build.gradle文件。 我想知道如何编写脚本代码来自动执行测试用例。
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.10.+'
}
}
apply plugin: 'android'
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
}
android {
compileSdkVersion 19
buildToolsVersion "19.0.3"
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
test {
java.srcDirs = ['src/test/java']
resources.srcDirs = ['src/test/resources']
}
// Move the tests to tests/java, tests/res, etc...
instrumentTest.setRoot('tests')
androidTest.setRoot('tests')
// Move the build types to build-types/<type>
// For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
// This moves them out of them default location under src/<type>/... which would
// conflict with src/ being used by the main source set.
// Adding new build types or product flavors should be accompanied
// by a similar customization.
debug.setRoot('build-types/debug')
release.setRoot('build-types/release')
}
}
这是我使用的:
android {
// ...
// your stuff
// ...
// So Android Studio can nicely edit the test files
sourceSets {
androidTest {
java.srcDir file('src/test/java')
}
}
}
// <Task to run tests>
sourceSets {
unitTest {
java.srcDir file('src/test/java')
}
}
configurations {
unitTestCompile.extendsFrom runtime
unitTestRuntime.extendsFrom unitTestCompile
}
task unitTest(type: Test, dependsOn: assemble) {
description = "run unit tests"
testClassesDir = project.sourceSets.unitTest.output.classesDir
classpath = project.sourceSets.unitTest.runtimeClasspath
}
check.dependsOn unitTest
// </Task to run tests>
dependencies {
// ...
// compile stuff
// ....
unitTestCompile files("$project.buildDir/classes/release")
unitTestCompile 'junit:junit:4.11'
}
运行测试:
gradlew unitTest
该解决方案尚未实施和测试。 工作正在进行中,欢迎发表评论。
仔细阅读所有用户指南后 ,很明显没有对Eclipse Android Test项目的直接支持。 原因是新的构建系统采用Gradle(和Maven)样式在模块/项目中进行了单元测试。
但是由于Eclipse Android Test项目仍然是Android项目,因此可以尝试
将build.gradle
添加到Eclipse Android Test项目。
它应该在dependencies
具有compile project(':app')
/* Android * http://www.nodeclipse.org/projects/gradle * Nodeclipse/Enide build.gradle template for classic Android project * https://github.com/Nodeclipse/nodeclipse-1/blob/master/org.nodeclipse.enide.editors.gradle/docs/android/build.gradle * Gradle Plugin User Guide: * http://tools.android.com/tech-docs/new-build-system/user-guide * Usage * 1. put in project root * 2. check version numbers * 3. use from command line or with Gradle for Android http://marketplace.eclipse.org/content/gradle * Support for this template * https://github.com/nodeclipse/nodeclipse-1/issues/ * History * 2014-03-13 android plugin updated to 0.9, see http://tools.android.com/tech-docs/new-build-system/migrating_to_09 * 2014-04-01 check for gradle version * 2014-04-10 wrapper and runAndroidApplication tasks * 2014-04-25 rename to run, add << * 2014-05-23 defaut plugin version 0.10.x * 2014-06-06 show "boilerplate part" * @author Paul Verest */ println GradleVersion.current().prettyPrint() assert gradle.gradleVersion >= "1.10" // android plugin 0.10 requires Gradle 1.10, 1.11, 1.12 // after `gradle wrapper` it is possible to use './gradlew build' with Gradle version specified task wrapper(type: Wrapper) { gradleVersion = '1.12' } //{ "boilerplate part" buildscript { repositories { mavenCentral() //jcenter() } dependencies { classpath 'com.android.tools.build:gradle:0.10.+' } } apply plugin: 'android' dependencies { compile fileTree(dir: 'libs', include: '*.jar') //androidTestCompile 'com.jayway.android.robotium:robotium-solo:4.3.1' // for multi-module project build (needs `settings.gradle`): // reference needed modules or App under test (for Eclipse Android Test project) compile project(':app') } android { compileSdkVersion 19 buildToolsVersion "19.0.3" sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] resources.srcDirs = ['src'] aidl.srcDirs = ['src'] renderscript.srcDirs = ['src'] res.srcDirs = ['res'] assets.srcDirs = ['assets'] } // Move the tests to tests/java, tests/res, etc... androidTest.setRoot('tests') // Move the build types to build-types/<type> // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ... // This moves them out of them default location under src/<type>/... which would // conflict with src/ being used by the main source set. // Adding new build types or product flavors should be accompanied // by a similar customization. debug.setRoot('build-types/debug') release.setRoot('build-types/release') } } //} "boilerplate part"
因为app及其测试现在使多模块项目添加settings.gradle
。 将其放低1级(两个项目所在的文件夹)的最简单方法
include ':app' include ':apptest'
其他方法是放入同级文件夹,例如称为parent
includeFlat 'app' includeFlat 'apptest'
在以后的情况下,您将需要从该文件夹运行构建(或每次使用-c
CLI选项指定settings.gradle
位置)
更新进行有关gradle的纯JUnit测试的研究(此问题有点偏离主题),似乎Android Tooling团队忽略了这个问题,打破了其他开发人员正在尝试使用较新的android gradle插件进行的工作。 即使在Android Studio中也是如此,该如何在Android Studio中创建测试? 。 唯一关心的组织是Robolectric贡献者,他们的框架已准备好用于纯JUnit测试https://github.com/robolectric/gradle-android-test-plugin
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.