Android '/gradlew-Dtest.single=简单测试测试';运行我所有的测试

Android '/gradlew-Dtest.single=简单测试测试';运行我所有的测试,android,testing,gradle,android-studio,robolectric,Android,Testing,Gradle,Android Studio,Robolectric,我的项目是在Android Studio上创建的普通Android项目 我在谷歌上搜索了很多来运行一个测试(SimpleTest中的测试,本例中是一个测试),每个人都说我应该这样做 ./gradlew -Dtest.single=SimpleTest test 在我的根文件夹中 或者是在我的内部项目文件夹中 ../gradlew -Dtest.single=SimpleTest test 我尝试了很多类似的方法,但它总是运行我所有的测试。(所有类中有11个测试) 我的身材有问题吗?格雷德尔

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

我在谷歌上搜索了很多来运行一个测试(SimpleTest中的测试,本例中是一个测试),每个人都说我应该这样做

./gradlew -Dtest.single=SimpleTest test
在我的根文件夹中

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

../gradlew -Dtest.single=SimpleTest test
我尝试了很多类似的方法,但它总是运行我所有的测试。(所有类中有11个测试)

我的身材有问题吗?格雷德尔还是我缺少了什么

这是我的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'
    }
}
符号

-Dtest.single=SimpleTest
表示在名为“test”的任务中仅运行SimpleTest。如果测试任务名称不同,则必须更改系统属性。例如,您的测试任务名为“instrumentationTest”,属性必须为

-DinstrumentationTest.single=SimpleTest
干杯,
勒内给了我一个线索。我从微软获得了一个新的Android Studio插件,用于
Robolectric

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

您也可以在
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
运行良好

这就是我的工作原理:

/gradlew testDebug--tests*TaskCommandSpec

使用
testDebug
testRelease
而不仅仅是
test
。 如果您有构建变体,则使用例如
testProRelease


文档:

运行
admob
包中的每个类:

./gradlew clean test --tests "admob.*"
运行单个测试类:

./gradlew clean test --tests SimpleTest
SimpleTest
类中运行单个测试方法:

./gradlew clean test --tests SimpleTest.simpleMethod

-Dtest.single
是使用
java
插件运行单个测试类或方法的正确方法。android单元测试插件的情况可能会有所不同。@PeterNiederwieser感谢您的评论。这是否意味着我应该为android单元测试找到一个特定的解决方案?@PeterNiederwieser你给了我一个线索:)我发现
android单元测试
插件仍然不支持
-Dtest。通过在
Github
上向该插件的开发者询问这个选项,就可以找到一个
选项。他为此制作了一个新补丁,并将新版本上传到Maven,所以现在我终于可以运行一个测试类:)如果你回答我关于这个的问题,我会接受:)这对我有效:谢谢你的评论:)我是gradle或Android Studio的新手,所以我只使用默认测试。instrumentTest不是我的自定义任务。实际上,如果我像
/gradlew instrumentTest
那样运行,它会说没有这样的任务。这就是为什么我只是为SimpleTest运行测试。我测试了运行
。/gradlew-dinstrucumentTest.single=SimpleTest测试
,它运行我所有的测试。所以您的测试任务被简单地命名为“测试”?您能否检查将
-Dtest.single=…
部分放在任务之后是否会产生影响:
。/gradlew test-Dtest.single=SimpleTest
?不应该,但你永远不会知道是的,我尝试了
。/gradlew test-Dtest.single=SimpleTest
。/gradlew test-dinstructiontest=SimpleTest
,但仍然运行所有测试。