2014-02-06 78 views
6

使用android gradle插件閱讀android guide on testing之後,我想爲我的POJO設置JUnit測試,這些測試不能通過儀器測試運行。這個想法是,不依賴於Android的代碼的測試應該非常快速(並且促進TDD)。如何爲Android/Gradle設置單元測試

有沒有一種標準的方法來建立一個源代碼集和任務build.gradle來完成這個?這是主要問題,第二個問題是我的下面的嘗試有什麼問題...

我正在使用Android Studio 0.4.2和Gradle 1.9,在新的「測試」文件夾中試驗一個簡單的JUnit測試類。這裏是我到目前爲止,但是當我運行「gradle這個testPojo」我得到這樣的結果:

:android:assemble UP-TO-DATE 
:android:compileUnitTestJava UP-TO-DATE 
:android:processUnitTestResources UP-TO-DATE 
:android:unitTestClasses UP-TO-DATE 
:android:testPojo FAILED 

* What went wrong: 
Execution failed for task ':android:testPojo'. 
> failed to read class file 
/path/to/project/android-app/build/classes/unitTest/TestClass.class 

我驗證了類其實那裏,所以我很困惑,爲什麼任務不能夠讀取文件。

這裏是的build.gradle文件:

... 

sourceSets { 
    unitTest { 
    java.srcDir file('src/test/java') 
    resources.srcDir file('src/test/resources') 
    } 
} 

dependencies { 
    ... 
    unitTestCompile 'junit:junit:4.11' 
} 

configurations { 
    unitTestCompile.extendsFrom instrumentTestCompile 
    unitTestRuntime.extendsFrom instrumentTestRuntime 
} 

task testPojo(type: Test, dependsOn: assemble){ 
    description = "Run pojo unit tests (located in src/test/java...)." 
    testClassesDir = sourceSets.unitTest.output.classesDir 

    android.sourceSets.main.java.srcDirs.each { dir -> 
    def buildDir = dir.getAbsolutePath().split('/') 
    buildDir = (buildDir[0..(buildDir.length - 4)] + ['build', 'classes', 'debug']).join('/') 
    sourceSets.unitTest.compileClasspath += files(buildDir) 
    sourceSets.unitTest.runtimeClasspath += files(buildDir) 
    } 
    classpath = sourceSets.unitTest.runtimeClasspath 
} 

check.dependsOn testPojo 

回答

0

我建議你使用robolectric,其聲明如下:

classpath 'org.robolectric:robolectric-gradle-plugin:0.11.+' 

,然後應用插件:

apply plugin: 'robolectric'