簡體   English   中英

Android,Gradle。 如何從測試應用程序構建應用程序並運行測試

[英]Android, Gradle. How to build application and run tests from test application

我在里面有android項目和android測試項目,位於文件夾測試下。 這些項目的結構就像日食一樣

+ -src
| - res
| - libs
| - 測試
| .....

我用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文件?

UPDATE

我修復了輸出錯誤,並使gradle構建成功,但我不明白什么是goind。 我特意失敗了我的測試,但是gradle構建仍然是成功的。
我做了什么:
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
                }
            }
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM