【问题标题】:'./gradlew -Dtest.single=SimpleTest test' runs all tests I have'./gradlew -Dtest.single=SimpleTest test' 运行我所有的测试
【发布时间】:2013-11-07 01:48:07
【问题描述】:

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

我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'
    }
}

【问题讨论】:

  • -Dtest.single 是使用 java 插件时运行单个测试类或方法的正确方法。 android-unit-test 插件的情况可能有所不同。
  • @PeterNiederwieser 感谢您的评论。这是否意味着我应该为android-unit-test找到一个特定的解决方案?
  • @PeterNiederwieser 你给了我一个线索 :) 我发现android-unit-test 插件仍然不支持-Dtest.single 选项,通过在Github 向这个插件的开发人员询问这个选项。他为此制作了一个新补丁并将新版本上传到 Maven,所以现在我终于可以运行一个测试类了 :) 如果你回答我的问题,我会接受 :)

标签: android testing gradle android-studio robolectric


【解决方案1】:

符号

-Dtest.single=SimpleTest

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

-DinstrumentationTest.single=SimpleTest

干杯, 勒内

【讨论】:

  • 感谢您的评论 :) 我是 gradle 或 Android Studio 的新手,所以我只使用默认测试。 instrumentTest 不是我的自定义任务。实际上,如果我像./gradlew instrumentTest 一样运行,它会说没有这样的任务。这就是为什么我只为 SimpleTest 运行 test。
  • 我测试了运行../gradlew -DinstrumentTest.single=SimpleTest test,它运行了我所有的测试。
  • 所以你的测试任务被简单地命名为“test”?您能否检查将-Dtest.single=... 部分放在任务之后 是否会有所不同:../gradlew test -Dtest.single=SimpleTest?不应该,但你永远不会知道
  • 是的,我试过 ../gradlew test -Dtest.single=SimpleTest 和 ../gradlew test -DinstrumentTest=SimpleTest 但仍然运行所有测试。
【解决方案2】:

这对我有用:

./gradlew testDebug --tests *TaskCommandSpec

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

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

【讨论】:

    【解决方案3】:

    @PeterNiederwieser 给了我一个线索。我从https://github.com/JCAndKSolutions/android-unit-test 获得了一个用于Robolectric 的新Android Studio 插件

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

    你也可以在build.gradlelike中使用它

    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 运行良好。

    【讨论】:

      【解决方案4】:

      运行admob 包中的每个类:

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

      运行单个测试类:

      ./gradlew clean test --tests SimpleTest
      

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

      ./gradlew clean test --tests SimpleTest.simpleMethod
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-07
        • 1970-01-01
        • 2020-01-03
        • 2019-02-19
        • 1970-01-01
        相关资源
        最近更新 更多