2013-06-18 148 views
17

我是新來的gradle和Android Studio,我試圖弄清楚如何運行測試。我遵循http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Testing中的說明,我能夠運行儀器測試,但只能執行/gradlew connectedInstrumentTest。 我在理解其他check任務時遇到問題,這些任務不會在我的應用中執行任何代碼。 這是./gradlew tasks printsGradle Android測試

... 
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集成測試非常有用。

回答

1

檢查應該運行儀器測試IIRC。關於運行非android測試。目前android-gradle插件不支持它。然而,我做了一個插件來運行Robolectric的JUnit測試,所以你不需要儀器測試。這裏是鏈接:android-unit-test

5
  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 它清楚地描述瞭如何使用該插件。

項目結構

我們必須使用默認文件夾結構才能使用此插件。我們必須使用文件夾,名爲「測試」,以保持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中用作綜合測試。

+4

Gradle-android-test-plugin已棄用,不應再使用它(它根本不適用於最新的Android gradle插件) – tomrozb

+0

該插件已重命名爲** robolectric-gradle-plugin **,現由Robolectric團隊維護:https://github.com/robolectric/robolectric-gradle-plugin – friederbluemle