9

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

项目结构

我用谷歌搜索了很多运行单个测试(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

4 回答 4

9

符号

-Dtest.single=SimpleTest

意味着在名为“测试”的任务中只运行 SimpleTest。如果您的测试任务名称不同,您必须更改系统属性。例如,您的测试任务被命名为“instrumentationTest”,该属性必须是

-DinstrumentationTest.single=SimpleTest

干杯,勒内

于 2013-11-07T07:46:49.307 回答
4

这对我有用:

./gradlew testDebug --tests *TaskCommandSpec

使用testDebugortestRelease而不是test. 如果您有构建变体,请使用例如testProRelease

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

于 2016-05-18T13:43:15.593 回答
2

@PeterNiederwieser给了我一个线索。我Robolectrichttps://github.com/JCAndKSolutions/android-unit-test获得了一个新的 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效果很好。

于 2013-12-05T05:07:35.013 回答
0

运行包中的每个类admob

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

运行单个测试类:

./gradlew clean test --tests SimpleTest

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

./gradlew clean test --tests SimpleTest.simpleMethod
于 2021-03-25T05:07:14.870 回答