2016-02-17 9 views
6

मैं अपने एंड्रॉइड प्रोजेक्ट के लिए दो (या एकाधिक) परीक्षण कार्यों में सक्षम होना चाहता हूं, जहां अंतर जुनाइट श्रेणियों का एक अलग सेट शामिल/बहिष्कृत करना है।एंड्रॉइड यूनिट का मूल्यांकन

Gradle जावा प्लगइन का उपयोग करना, मैं

task testFast(type: Test) { 
    useJUnit { 
     includeCategories 'foo.Fast' 
     excludeCategories 'foo.Slow' 
    } 
} 

task testSlow(type: Test) { 
    useJUnit { 
     includeCategories 'foo.Slow' 
     excludeCategories 'foo.Fast' 
    } 
} 

हालांकि तरह कुछ कर सकते हैं, अगर एंड्रॉयड प्लगइन का उपयोग कर, मैं एंड्रॉयड बंद होने testOptions जोड़ने के लिए शामिल करने के लिए, बाहर/है

android { 
... 
    testOptions { 
     unitTests.all { 
      useJUnit { 
       excludeCategories foo.Slow' 
      } 
     } 
    } 
... 
} 

लेकिन बेशक यह सभी निर्माण प्रकारों के लिए सभी परीक्षण कार्यों पर लागू होता है।

क्या एक ही निर्माण संस्करण का उपयोग करने वाले कार्यों को बनाने का कोई तरीका है, लेकिन विभिन्न श्रेणियों पर परीक्षण निष्पादित करें?

testOptions { 
    unitTests.all { 
     useJUnit { 
      if (project.hasProperty('testCategory') && testCategory == "Slow") { 
       includeCategories 'foo.Slow' 
      } else { 
       excludeCategories 'foo.Slow' 
      } 
     } 
    } 
} 

और प्रयोग

gradlew -PtestCategory=Slow test 

उत्तर

5

बेस्ट मैं ले कर आए हैं कमांड लाइन से एक Gradle संपत्ति का उपयोग करने के लिए है संपत्ति, तो मैं इसके साथ आया था। आपको यह सुनिश्चित करने की ज़रूरत है कि आप केवल एक ही रन में परीक्षण कार्यों में से किसी एक पर निष्पादित करते हैं, हालांकि।

मुझे उम्मीद है कि एंड्रॉइड प्लगइन भविष्य में रिलीज में यह आसान बना देगा।

task testFast(dependsOn: 'testDebugUnitTest') 
task testSlow(dependsOn: 'testDebugUnitTest') 

gradle.taskGraph.whenReady { taskGraph -> 
    def testTask = tasks.getByName("testDebugUnitTest") 

    if (taskGraph.hasTask(tasks.getByName("testFast"))) { 
     testTask.useJUnit { 
      includeCategories 'foo.Fast' 
      excludeCategories 'foo.Slow' 
     } 
    } 

    if (taskGraph.hasTask(tasks.getByName("testSlow"))) 
     testTask.useJUnit { 
      includeCategories 'foo.Slow' 
      excludeCategories 'foo.Fast' 
     } 
    } 
} 
0

मैं एक समाधान है कि कि एक अतिरिक्त Gradle आवश्यकता नहीं किया था की जरूरत:

संबंधित मुद्दे