2014-10-28 107 views
5

我想運行默認測試運行時排除的路徑中具有「集成」字的測試,但我想在單獨的任務中將它們一起運行。目前,我有一個基本的測試配置:使用android在gradle上分離集成測試任務

sourceSets { 
    androidTest.setRoot('src/test') 

    integrationTest.setRoot('src/test') 
} 

... 

androidTestCompile 'junit:junit:4.11' 
androidTestCompile 'com.jayway.android.robotium:robotium-solo:5.1' 
androidTestCompile files('libs/android-junit-report-1.5.8.jar') 
androidTestCompile 'com.squareup:fest-android:1.0.8' 
androidTestCompile 'org.robolectric:robolectric:2.3' 

integrationTestCompile 'junit:junit:4.11' 
integrationTestCompile 'com.jayway.android.robotium:robotium-solo:5.1' 
integrationTestCompile files('libs/android-junit-report-1.5.8.jar') 
integrationTestCompile 'com.squareup:fest-android:1.0.8' 
integrationTestCompile 'org.robolectric:robolectric:2.3' 

... 

androidTest { 
    include '**/*Test.class' 
    exclude '**/espresso/**/*.class' 
    exclude '**/integration/**' 
} 

task integrationTest(type: Test) { 
    include '**/integration/**' 
} 

這將導致一個錯誤,而在AS的gradle同步:

Warning: project ':ProjectName': Unable to resolve all content root directories 
Details: java.lang.NullPointerException: null 

,但如果我刪除integrationTest任務不會發生的。另外隨着任務現在我能夠運行「integrationTest」任務,但這會導致另一個錯誤:

Error:Could not determine the dependencies of task ':ProjectName:integrationTest'. 
A base directory must be specified in the task or via a method argument! 

回答

1

這不完全是顯而易見的,但這個錯誤是由你的任務定義沒有定義testClassesDir造成的。

task integrationTest(type: Test) { 
    include '**/integration/**' 
    testClassesDir = file('build/intermediates/classes') 
} 

類似的東西在Gradle User Guide爲Java插件的說明,但並不完全轉換到Android插件。我還沒有制定出所有的細節,但我會更新這個答案,因爲我明白了。

相關問題