【问题标题】:Gradle Android testingGradle Android 测试
【发布时间】:2013-06-18 20:03:43
【问题描述】:

我是 gradle 和 Android Studio 的新手,我正在尝试弄清楚如何运行测试。我按照http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Testing 中的说明进行操作,我能够运行仪器测试,但只能执行/gradlew connectedInstrumentTest。 我无法理解其他 check 任务,这些任务不在我的应用程序中执行任何代码。 这就是./gradlew tasks prints

...
Verification tasks
------------------
check - Runs all checks.
connectedCheck - Runs all device checks on currently connected devices.
connectedInstrumentTest - Installs and runs the tests for Build 'Debug' on connected devices.
deviceCheck - Runs all device checks using Device Providers and Test Servers.
...

如果check 运行所有检查...不应该运行我从connectedInstrumentTest 得到的那些吗?

另外,我如何运行不需要 Android 环境的测试?我应该把它们放在 /test/java 下吗?如果是这样,我应该运行什么命令来执行它们?

抱歉,如果这些问题看起来很明显,但我无法在文档中找到这些问题的任何答案。

谢谢!

编辑:

所以我在这里取得了一些进展。 看起来check 没有做任何事情。 (现在)开发人员可以将相关任务添加到 check 以运行一些 JUnit 测试。您将需要创建一个任务,让它找到源代码,编译它们并运行它们。

connectedCheckconnectedInstrumentTest:在设备中运行instrumentationTest。 (这总是有效的)。

deviceCheck:正如文档所说,这对于 Continuos 集成测试很有用。

【问题讨论】:

    标签: android testing gradle android-studio


    【解决方案1】:
    1. 如果检查运行所有检查......它不应该运行我从connectedInstrumentTest获得的那些吗? 您必须运行 connectedInstrumentTest 任务作为依赖项来检查任务。

      check.dependsOn connectedInstrumentTest

    2. 如何运行不需要 Android 环境的测试?

    对于 android 项目,我们可以讨论 3 种类型的测试

    1. Junit 测试
    2. Robolectric Test
    3. 仪器测试

    Junit 测试

    我们不能使用普通的 junit 测试来检查 android 相关的类。我们可以做的是将核心 java 类分离到一个 java 库项目中,并将该依赖项添加到 android 项目中。

    Robolectric Test

    我们可以使用 robolectric 测试在模拟器之外运行单元测试。这使得使用 CI 服务器可以快速轻松地配置测试。

    要运行 robolectric 测试,我们使用 gradle-android-test-plugin 它清楚地描述了如何使用该插件。

    项目结构

    我们必须使用默认文件夹结构才能使用这个插件。我们必须使用名为“test”的文件夹来保存 robolectric 测试:

     MyProject/
       | settings.gradle
       | build.gradle
       - app/
           | build.gradle
            -main
               -java
                  -com.example.calculator    
    
            -test
               -java
                  -com.example.calculator.robolectrictests
    

    构建文件是

    buildscript {
        repositories {
            mavenCentral()
            maven {
                url 'https://oss.sonatype.org/content/repositories/snapshots/'
            }
        }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.6.+'
        classpath 'com.squareup.gradle:gradle-android-test-plugin:0.9.1-SNAPSHOT'
    }
    apply plugin: 'android'
    apply plugin: 'android-test'
    
    repositories {
        mavenCentral()
    }
    android {
        compileSdkVersion 19
        buildToolsVersion "19.0.0"
        defaultConfig {
            minSdkVersion 8
            targetSdkVersion 19         
        }
    }
    dependencies {
        compile 'com.android.support:appcompat-v7:+'   
        testCompile 'junit:junit:4.10'
        testCompile 'org.robolectric:robolectric:2.1.+'
        testCompile 'com.squareup:fest-android:1.0.+'
    }
    

    这个测试任务会和检查任务一起自动执行。

    仪器测试

    正如您所提到的,这需要使用 android 模拟器。这会使测试变慢,这意味着它们不是进行 TDD 的好方法。

    我们可以在 TDD 过程中使用 robolectric 测试作为单元测试。 我们可以将仪器测试用作 TDD 中的集成测试。

    【讨论】:

    • gradle-android-test-plugin 已弃用,您不应再使用它(它根本不适用于最新的 android gradle 插件)
    • 插件已重命名为 robolectric-gradle-plugin,现在由 Robolectric 团队维护:github.com/robolectric/robolectric-gradle-plugin
    【解决方案2】:

    检查应该运行仪器测试 IIRC。关于运行非安卓测试。目前 android-gradle 插件不支持它。但是,我制作了一个插件来使用 robolectric 运行 JUnit 测试,因此您不需要仪器测试。这是链接:android-unit-test

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-12
      • 2014-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多