2016-12-13 3 views
6

के लिए विभाजन इकाई और एकीकरण परीक्षण वर्तमान में मेरे पास test/src/java फ़ोल्डर है जहां एंड्रॉइड एप्लिकेशन के लिए सभी परीक्षण संग्रहीत किए जाते हैं (परीक्षण जूनिट, मॉकिटो और रोबॉलेक्ट्रिक का उपयोग करके किया जाता है)।एंड्रॉइड

और मैं ./gradlew test

का उपयोग कर रहा प्राप्त करने के लिए दो फ़ोल्डर्स रहा है करना चाहते हैं क्या उन चला सकते हैं:

  1. integrationTest/src/java - एकीकरण परीक्षण के लिए
  2. test/src/java - इकाई परीक्षण के लिए

और मैं उन्हें अलग से चलाने के लिए भी चाहूंगा, जैसे ./gradlew test और ./gradlew integrationTest

मैं sourceSets इस तरह का उपयोग कर परीक्षण के साथ निर्देशिका विभाजित करने के लिए प्रबंधित किया है:

sourceSets { 
     test { 
      java { 
       srcDirs = ['src/test/java', 'src/integrationTest/java', 'src/commonTest/java'] 
      } 
      resources { 
       srcDirs = ['src/test/resources', 'src/integrationTest/resources', 'src/commonTest/resources'] 
      } 
     } 
    } 

और मैं कैसे कस्टम परीक्षण कार्य बनाने के लिए पर कई उदाहरण googled था, लेकिन उनमें से ज्यादातर एंड्रॉयड के बजाय जावा से जुड़े हुए हैं और अन्य पुराने हैं। मैंने उस दिन पूरे दिन बिताया है और इसलिए यदि कोई मेरी मदद कर सकता है तो मैं वास्तव में इसकी सराहना करता हूं।

+0

यह यहां पुस्तकालय: [कड़ी] (https://github.com/Yelp/yelp-android/blob/master/build.gradle) यह काम कर रहा है। हालांकि यह 'com.android.library' प्लगइन का उपयोग करता है। – rmoore

+0

एक डिफ़ॉल्ट 'कि डिवाइस/एम्युलेटर पर चल रहे हो जाएगा एंड्रॉयड परीक्षण के लिए androidTest' फ़ोल्डर नहीं है। क्या वह फ़ोल्डर है जो आपको चाहिए? –

उत्तर

0

संभवतः तरह

sourceSets { 
    integrationTest { 
     java { 
      compileClasspath += main.output 
      runtimeClasspath += main.output 
      srcDir 'src/integrationTest/java' 
     } 
     resources.srcDir 'src/integrationTest/resources' 
    } 
} 

configurations { 
    integrationTestCompile { 
     extendsFrom compile 
    } 
    integrationTestRuntime { 
     extendsFrom runtime 
    } 
} 

task integrationTest(type: Test) { 
    testClassesDir = sourceSets.integrationTest.output.classesDir 
    classpath = sourceSets.integrationTest.runtimeClasspath 
} 
check.dependsOn integrationTest 

कुछ तो फिर तुम

dependencies { 
    integrationTestCompile 'org.seleniumhq.selenium:selenium-java:3.0.1' 
    integrationTestRuntime 'com.foo:bar:1.0' 
} 
+0

यह एक जावा समाधान है, नहीं? एंड्रॉइड थोड़ा अलग है। – rmoore

2

कर सकता है अपने एकीकरण परीक्षण परीक्षण instrumented रहे हैं, तो आप सिर्फ डिफ़ॉल्ट फ़ोल्डर्स test और androidTest का उपयोग करें और उन्हें अलग से चलाने ./gradlew test का उपयोग कर सकते हैं और ./gradlew connectedAndroidTest

एक और तरीका (यदि आप एकीकृत हो सकते हैं test फ़ोल्डर के अंदर आयन परीक्षण) test फ़ोल्डर के अंदर अलग संकुल का उपयोग करें और अलग का उपयोग कर परीक्षण चलाने के लिए होगा:

./gradlew testDebug --tests="com.yourapplication.unittests.*" 
./gradlew testDebug --tests="com.yourapplication.integrationtests.*" 
... 
+0

'./gradlew testDebug --tests com.company.package.unittest *' देखें https://developer.android.com/studio/test/command-line.html#RunTestsGradle और https:। // समाधान है कि वास्तव में Android एप्लिकेशन के लिए काम करता docs.gradle.org/current/userguide/java_plugin.html#test_filtering। कई अन्य नमूने और समाधान हैं, लेकिन वे जावा परियोजनाओं के बारे में हैं, एंड्रॉइड नहीं। – Mike

1

मैं एक ही समस्या थी कुछ दिन पहले।

इसे हल और स्वतंत्र रूप से परीक्षण के प्रत्येक प्रकार के चलाने में सक्षम होना करने के लिए, मैं इस तरह मेरे परीक्षण अलग:

// run only unit tests 
test{ 
    include '**/unit/**' 
    exclude '**/integration/**' 
    doLast { 
     println 'Unit tests execution finished.' 
    } 
} 

// run only integration tests 
task integrationTest(type: Test){ 
    include '**/integration/**' 
    exclude '**/unit/**' 
    doLast { 
     println 'Integration tests execution finished.' 
    } 
} 

// run all tests (unit + integration) 
task allTests(type: Test){ 
    include '**/integration/**' 
    include '**/unit/**' 
    doLast { 
     println 'All tests execution finished.' 
    } 
} 

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

केवल आपके एकीकरण परीक्षण चलाने के लिए एक ग्रेडल कमांड बनाते समय आप एक समान तर्क का उपयोग कर सकते हैं।

इस विन्यास और Gradle का उपयोग कर अपने परीक्षण को अंजाम करने के लिए, का उपयोग करें:

  • ./gradlew test निष्पादित करने के लिए इकाई परीक्षण केवल
  • ./gradlew integrationTests एकीकरण परीक्षणों केवल निष्पादित करने के लिए।
  • ./gradlew allTestsदोनों निष्पादित करने के लिए एकीकरण और इकाई परीक्षण।

नोट: आप कर सकते हैं सेटअप क्रम में शामिल हैं/परीक्षण या वर्गों को बाहर जब अपने परीक्षण को क्रियान्वित करने के लिए भी शामिल है/शामिल नहीं में पथ। केवल एक परीक्षण शामिल करना और दूसरों को छोड़ना और इसके विपरीत भी संभव है।