2014-02-07 77 views
1

我剛剛將我的項目轉換爲Gradle,並且工作正常。我正在嘗試爲它添加一些測試。我遵循Android Gradle用戶指南設置我的build.gradle測試。這裏是我的build.gradle不使用Gradle創建儀器測試

buildscript { 
    repositories { 
     maven { 
      url 'http://repo1.maven.org/maven2' 
     } 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:0.7.+' 
    } 
} 

apply plugin: 'android' 

repositories { 
    mavenCentral() 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: '*.jar') 
} 

android { 
    compileSdkVersion 19 
    buildToolsVersion "19.0.1" 

    defaultConfig { 
     testPackageName "com.instrumentTest.java" 
     testInstrumentationRunner "android.test.InstrumentationTestRunner" 
    } 

    sourceSets { 
     main { 
      manifest.srcFile 'AndroidManifest.xml' 
      java.srcDirs = ['src'] 
      resources.srcDirs = ['src'] 
      aidl.srcDirs = ['src'] 
      renderscript.srcDirs = ['src'] 
      res.srcDirs = ['res'] 
      assets.srcDirs = ['assets'] 
     } 

     // Move the tests to tests/java, tests/res, etc... 
     instrumentTest.setRoot('src/instrumentTest') 

     // Move the build types to build-types/<type> 
     // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ... 
     // This moves them out of them default location under src/<type>/... which would 
     // conflict with src/ being used by the main source set. 
     // Adding new build types or product flavors should be accompanied 
     // by a similar customization. 
     debug.setRoot('build-types/debug') 
     release.setRoot('build-types/release') 
    } 
} 

我創建src/下了一個叫做com.instrumentTest.java,我在把樣品ServiceTest.java類來測試我的服務。我使用gradle aDT運行測試,並得到這個:

* Exception is: 
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':<MyProject>:compileDebugAidl'. 
     at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69) 
     at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46) 
     at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35) 
Caused by: com.android.ide.common.internal.LoggedErrorException: Failed to run command: 
<some big command> 
Error Code: 
     1 
Output: 
     \src\com\instrumentTest\java\MyServiceTest.java:10: syntax error 
     \src\com\instrumentTest\java\MyServiceTest.java:10: syntax error don't know what to do with "public" 
     \src\com\instrumentTest\java\MyServiceTest.java:10: syntax error don't know what to do with "public" 
     \src\com\instrumentTest\java\MyServiceTest.java:10: syntax error don't know what to do with "class" 
     \src\com\instrumentTest\java\MyServiceTest.java:10: syntax error don't know what to do with "MyServiceTest" 
     \src\com\instrumentTest\java\MyServiceTest.java:10: syntax error don't know what to do with "extends" 
     \src\com\instrumentTest\java\MyServiceTest.java:10: syntax error don't know what to do with "ServiceTestCase<MyService>" 

它輸出syntax error don't know what to do with在我的樣本測試類的每一行代碼。不知道發生了什麼事。所有這些設置的文檔都很模糊。

我也不太確定assembleDebugTest,connectedInstrumentTestinstallDebugTest之間的差異,根據他們對運行gradle tasks的描述。爲了使測試對Gradle可見,有沒有必要對我的清單做些什麼?我應該在一個完全不同的項目中創建我的測試嗎?我讀過以前的人會創建單獨的測試項目,但是因爲我在build.gradle文件中爲instrumentTest設置了根目錄,所以我認爲我們現在可以從一個項目完成所有工作?

回答

4

在的build.gradle,你宣佈你的instrumentTest文件夾是在的src/instrumentTest,這意味着如果你有一個測試中這是在com.instrumentTest包,它應該位於的src/instrumentTest/COM/instrumentTest/MyServiceTest。相反,您已將文件放在src/com/instrumentTest/java/MyServiceTest

由於我不明白它試圖用AIDL編譯器編譯它,並且你的java文件不是有效的AIDL。如果你把它移動到它所期望的instrumentTest目錄,它應該編譯好。

http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Android-tasks有一個Gradle任務的解釋。

  • assembleDebugTest - 組裝項目
  • connectedInstrumentTest的輸出(一個或多個)任務 - 運行,需要一個連接的設備或仿真器檢查。它們將並行運行在所有連接的設備上。
  • installDebugTest - 安裝所連接的設備或仿真器
+0

感謝您的幫助(和令人敬畏的工具!)斯科特。你是對的,我搞砸了測試目錄。 AIDL的錯誤讓我誤解了實際的問題。 –

0

可以代替試試這個,如果你不與gradle這個文件要勾搭: http://rexstjohn.com/unit-testing-with-android-studio/

基本上,你建立和運行,可以運行該模塊在所有測試中一個Android測試配置中,一個特定的包,類或方法。所以你可以在任何你想要的地方設置你的測試課程。它將選擇測試類而不必修改build.gradle文件和運行命令。這也回答了你最後的問題,它可以來自一個項目。

我剛開始使用Android Studio和Gradle,並且無法讓測試在第一時間正常運行,直到我嘗試了上述操作。我發現奇怪的是修改build.gradle文件來設置一個簡單的測試。

+0

我使用類似的策略在測試APK。你是否使用終端/命令行自動運行測試?你怎麼做的? – ssk