17

我是 gradle 和 Android Studio 的新手,我正在尝试弄清楚如何运行测试。我按照http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Testing中的说明进行操作,我能够运行 Instrument Tests 但只能执行/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 集成测试很有用。

4

2 回答 2

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

    check.dependsOn connectedInstrumentTest

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

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

  1. Junit 测试
  2. 机器人测试
  3. 仪器测试

Junit测试

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

机器人测试

我们可以使用 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 中的集成测试。

于 2013-12-13T06:11:56.920 回答
1

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

于 2013-11-26T18:45:49.653 回答