我有一个简单的HelloWorld Android项目(内置于Eclipse IDE中),我能够在cmd提示符下为此项目成功执行“gradle build”。
我也为它编写了一个简单的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')
}
}
答案 0 :(得分:0)
以下是我使用的内容:
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
答案 1 :(得分:0)
此解决方案尚未实施和测试。正在进行的工作,欢迎提出意见。
仔细阅读所有user guide之后,显然没有对Eclipse Android Test项目的直接支持。原因是新构建系统采用Gradle(和Maven)样式在模块/项目中进行单元测试。
但是因为Eclipse Android Test项目仍然是Android项目,所以有办法尝试
将build.gradle
添加到Eclipse Android Test项目中
它应该在compile project(':app')
dependencies
/* 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'
在以后的情况下,您需要从该文件夹运行构建(或使用settings.gradle
CLI option每次-c
位置指定
更新使用gradle进行纯JUnit测试的研究(对于这个问题有点偏离主题),似乎Android Tooling团队忽略了这个问题,打破了其他开发人员试图用更新的android gradle插件做的事情。即使在Android Studio中,它也不是How can I create tests in Android Studio?。关注的唯一组织是Robolectric贡献者,其框架已准备好进行纯JUnit测试https://github.com/robolectric/gradle-android-test-plugin