'./gradlew -Dtest.single = SimpleTest test'运行我所有的测试

时间:2013-11-07 01:48:08

标签: android testing gradle android-studio robolectric

我的项目是在 Android Studio 上创建的普通Android项目。

project structure

我用google搜索了一个单独的测试(在SimpleTest中测试,在这种情况下测试1次),每个人都说我应该这样做

./gradlew -Dtest.single=SimpleTest test

在我的根文件夹中。

或者我在我的内部项目文件夹中

../gradlew -Dtest.single=SimpleTest test

我尝试了很多像这样的方法,但它总是运行我所有的测试。(所有类中的11个测试)

我的build.gradle上有问题,还是有遗漏的东西?

这是我的 build.gradle 文件。

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

        classpath 'com.github.jcandksolutions.gradle:android-unit-test:1.0.+'
    }
}

apply plugin: 'android'

    repositories {
        mavenCentral()
    }

android {
    compileSdkVersion 18
    buildToolsVersion "18.1.1"

    defaultConfig {
        minSdkVersion 10
        targetSdkVersion 18
        // I changed this for this question
        packageName "com.XXX.XXXX"
    }

    sourceSets {
        instrumentTest.setRoot('src/test')
    }
}

apply plugin: 'android-unit-test'

dependencies {
    repositories {
        mavenCentral()
    }
    compile 'com.android.support:support-v4:18.0.+'
    compile 'com.android.support:appcompat-v7:+'

    compile 'com.google.code.gson:gson:2.2.4'
    compile group:'com.squareup.picasso', name:'picasso', version:'2.1.1'
    compile group:'com.squareup.okhttp', name:'okhttp', version:'1.2.1'
    compile group:'com.squareup', name:'otto', version:'1.3.4'

    compile group:'com.jakewharton', name:'butterknife', version:'3.0.0'

    compile group:'com.github.kevinsawicki', name:'http-request', version:'5.4.1'

    compile fileTree(dir: 'libs', include: '*.jar')

    testCompile 'junit:junit:4.10'
    testCompile 'org.robolectric:robolectric:2.2'
    testCompile 'com.squareup:fest-android:1.0.+'

    instrumentTestCompile 'junit:junit:4.10'
    instrumentTestCompile 'org.robolectric:robolectric:2.2'
    instrumentTestCompile 'com.squareup:fest-android:1.0.+'
}

tasks.withType(Compile) {
    options.encoding = "UTF-8"
}

tasks.withType(Test) {
    testLogging {
        events 'started', 'passed'
    }
}

4 个答案:

答案 0 :(得分:8)

符号

-Dtest.single=SimpleTest

表示在名为'test'的任务中只运行SimpleTest。如果测试任务名称不同,则必须更改系统属性。例如。您的测试任务名为'instrumentationTest'属性必须为

-DinstrumentationTest.single=SimpleTest

欢呼声, 勒

答案 1 :(得分:3)

这对我有用:

root@b7349202b6d3:/# ls -la /conf/ total 8 drwxr-xr-x 3 root root 4096 May 18 16:43 . drwxr-xr-x 74 root root 4096 May 18 16:55 .. drwxr-sr-x 2 root staff 40 May 18 16:43 application.properties

使用./gradlew testDebug --tests *TaskCommandSpectestDebug代替testRelease。 如果您有构建变体,请使用例如test

docs:https://docs.gradle.org/current/userguide/userguide_single.html

答案 2 :(得分:2)

@PeterNiederwieser给了我一个线索。我从https://github.com/JCAndKSolutions/android-unit-test

获得了Robolectric的新Android Studio插件

任何想要像我这样的解决方案的人都可以使用这个项目解决问题。

您也可以在build.gradle中使用

buildscript {
repositories {
    mavenCentral()
    mavenLocal()

}

dependencies {
        classpath 'com.android.tools.build:gradle:0.6.+'
        classpath 'com.github.jcandksolutions.gradle:android-unit-test:1.0.1'
    }
}

现在../gradlew clean check -Dtest.single=SomeTest效果很好。

答案 3 :(得分:0)

运行 admob 包中的每个类:

./gradlew clean test --tests "admob.*"

运行单个测试类:

./gradlew clean test --tests SimpleTest

SimpleTest 类中运行单个测试方法:

./gradlew clean test --tests SimpleTest.simpleMethod