gpt4 book ai didi

安卓, Gradle 。如何构建应用程序并从测试应用程序运行测试

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:58:52 24 4
gpt4 key购买 nike

我里面有android项目和android测试项目,位于文件夹tests下。这些项目的结构类似于 eclipse

+-源
| - 资源
| - 库
| - 测试
|.......

我用的是gradle。我想要的只是构建应用程序、运行单元测试并获取它们的报告。但我不明白如何做对。我在根文件夹中创建了 build.gradle 文件

buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.5.+'
}
}

apply plugin: 'android'

android {
compileSdkVersion 18
buildToolsVersion "18.1.1"
defaultConfig {
minSdkVersion 8
targetSdkVersion 18
testPackageName "ua.cooperok.stringcalc.tests"
testInstrumentationRunner "android.test.InstrumentationTestRunner"
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
unitTest {
java.srcDir file('tests/src')
resources.srcDir file('tests/res')
}
}

configurations {
unitTestCompile.extendsFrom runtime
unitTestRuntime.extendsFrom unitTestCompile
}

dependencies {
unitTestCompile files("$project.buildDir/classes/release")
}

task unitTest(type:Test){
description = "Run unit tests..."
testClassesDir = android.sourceSets.unitTest.output.classesDir
classpath = android.sourceSets.unitTest.runtimeClasspath
}

build.dependsOn unitTest

}

但是当我运行 gradle build 时出现错误
在源集单元测试中找不到属性“输出”。

此外,据我所知,要获得报告,我需要应用插件“android-reporting”,但是当我这样做时出现错误
无法添加名称为“android”的扩展程序,因为已使用该名称注册了一个扩展程序。

我应该这样做,还是必须在我的测试应用程序项目中创建新的 gradle.build 文件?

更新

我修复了输出错误,并成功构建了 gradle,但我不明白发生了什么。我故意没有通过测试,但 gradle build 仍然成功。
我做了什么:
1.我将任务unitTest从android部分移动到root,之后,我的测试项目开始编译,但是出现错误'packackage android.test not found'
2. 为了修复这个错误,我添加到 android 源的类路径路径中,所以在 gradle 构建成功之后,但实际上我不明白为什么它总是成功,即使测试失败

我仍然不明白如何从测试中获取报告

这是我的新build.gradle文件

buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.6+'
}
}

apply plugin: 'android'

android {
compileSdkVersion 18
buildToolsVersion "18.1.1"
defaultConfig {
minSdkVersion 8
targetSdkVersion 18
testPackageName "ua.cooperok.stringcalc.tests"
testInstrumentationRunner "android.test.InstrumentationTestRunner"
}
sourceSets {
main {
manifest.srcFile file('AndroidManifest.xml')
java.srcDirs = ['src']
resources.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
}
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
}
}

sourceSets {
unitTest {
java.srcDirs = ['tests/src']
resources.srcDirs = ['tests/src']
}
}

configurations {
unitTestCompile.extendsFrom runtime
unitTestRuntime.extendsFrom unitTestCompile
}

dependencies {
unitTestCompile files("$project.buildDir/classes/release")
unitTestCompile 'junit:junit:4.11'
compile fileTree(dir: 'libs', include: '*.jar')
}

task unitTest(type:Test, dependsOn: assemble) {
description = "run unit tests"
testClassesDir = sourceSets.unitTest.output.classesDir
classpath = files("$System.env.ANDROID_HOME/sources/android-18")
//actualy I didn't get any report
getReports().getJunitXml().setOutputPerTestCase(true)
}

build.dependsOn unitTest

最佳答案

我找到了解决方案。我对几个主题感到失望,并认为我需要为单元测试创​​建单独的任务。事实上,这很容易。
我没有改变我的项目结构,只是 build.gradle 文件。为了构建我运行的应用程序
gradle clean connectedCheck build
connectedCheck 从我的测试项目运行单元测试,如果某些测试失败 - gradle build 也会失败

这里是它的最终版本

buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.6+'
}
}

apply plugin: 'android'

android {
compileSdkVersion 18
buildToolsVersion "18.1.1"
defaultConfig {
minSdkVersion 8
targetSdkVersion 18
testPackageName "ua.cooperok.stringcalc.tests"
testInstrumentationRunner "android.test.InstrumentationTestRunner"
}
sourceSets {
main {
manifest.srcFile file('AndroidManifest.xml')
java.srcDirs = ['src']
resources.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
instrumentTest {
java.srcDirs = ['tests/src']
manifest.srcFile file('tests/AndroidManifest.xml')
resources.srcDirs = ['tests/src']
res.srcDirs = ['tests/res']
assets.srcDirs = ['tests/assets']
}
}
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
}

//Signing apk
if(project.hasProperty("signingPropertiesPath")) {
File propsFile = new File(System.getenv('HOME') + "/" + project.property("signingPropertiesPath"))
if(propsFile.exists()) {
Properties props = new Properties()
props.load(new FileInputStream(propsFile))

//loading keystore properties
signingConfigs {
release {
storeFile file(propsFile.getParent() + "/" + props['keystore'])
storePassword props['keystore.password']
keyAlias props['keyAlias']
keyPassword props['keyPassword']
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
}
}
}

关于安卓, Gradle 。如何构建应用程序并从测试应用程序运行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19927627/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com