Gradle Android测试

Loc*_*ike 17 testing android gradle android-studio

我是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.
...
Run Code Online (Sandbox Code Playgroud)

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

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

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

谢谢!

编辑:

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

connectedCheckconnectedInstrumentTest:在设备中运行instrumentationTest.(这总是奏效).

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

Mil*_*ara 5

  1. 如果check运行所有检查...不应该运行我从connectedInstrumentTest获得的那些?您必须运行connectedInstrumentTest任务作为依赖项来检查任务.

    check.dependsOn connectedInstrumentTest

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

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

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

Junit测试

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

Robolectric测试

我们可以使用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
Run Code Online (Sandbox Code Playgroud)

构建文件是

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.+'
}
Run Code Online (Sandbox Code Playgroud)

此测试任务将自动执行检查任务.

仪器测试

如你所述,这需要使用android模拟器.这使得测试变慢,这意味着它们不是做TDD的好方法.

我们可以使用robolectric测试作为TDD过程中的单元测试.仪器测试我们可以在TDD中作为综合测试使用.

  • gradle-android-test-plugin已被弃用,你不应该再使用它了(它根本不适用于最新的android gradle插件) (4认同)

sup*_*ugy 1

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