ग्रैडल पर केवल एक स्थानीय परीक्षण वर्ग कैसे चलाया जाए


429

मैं ग्रेडेल के लिए नया हूं। मैं ग्रैडल 1.10 और उबंटू 13 का उपयोग करता हूं।

मैं जानना चाहता हूं कि क्या एसबीटी में 'टेस्टोनली' के समान केवल एक स्थानीय टेस्ट क्लास को निष्पादित करने की कोई आज्ञा है ।


उत्तरों को देखते हुए, यह स्पष्ट होना चाहिए कि यह स्थानीय परीक्षणों के बारे में है , साधन परीक्षण के बारे में नहीं । एंड्रॉइड / ग्रैडल इन स्थानीय परीक्षणों को "यूनिट" परीक्षण कहकर भ्रमित करता है।
tir38

जवाबों:


560

सिंगल टेस्ट क्लास चलाने के लिए एयरबोर्न का जवाब अच्छा है।

कुछ कमांड लाइन विकल्पों का उपयोग करके, जो यहां पाए गए हैं , आप बस कुछ ऐसा कर सकते हैं।

gradle test --tests org.gradle.SomeTest.someSpecificFeature
gradle test --tests *SomeTest.someSpecificFeature
gradle test --tests *SomeSpecificTest
gradle test --tests all.in.specific.package*
gradle test --tests *IntegTest
gradle test --tests *IntegTest*ui*
gradle test --tests *IntegTest.singleMethod
gradle someTestTask --tests *UiTest someOtherTestTask --tests *WebTest*ui

टेस्टेल के संस्करण 1.10 से यह परीक्षण फ़िल्टर का उपयोग करके परीक्षणों का चयन करने का समर्थन करता है । उदाहरण के लिए,

apply plugin: 'java'

test {
  filter {
    //specific test method
      includeTestsMatching "org.gradle.SomeTest.someSpecificFeature"

     //specific test method, use wildcard for packages
     includeTestsMatching "*SomeTest.someSpecificFeature"

     //specific test class
     includeTestsMatching "org.gradle.SomeTest"

     //specific test class, wildcard for packages
     includeTestsMatching "*.SomeTest"

     //all classes in package, recursively
     includeTestsMatching "com.gradle.tooling.*"

     //all integration tests, by naming convention
      includeTestsMatching "*IntegTest"

     //only ui tests from integration tests, by some naming convention
     includeTestsMatching "*IntegTest*ui"
   }
}

बहु-स्वाद वातावरण (Android के लिए एक सामान्य उपयोग-मामला) के लिए, इस उत्तर को जांचें , क्योंकि --testsतर्क असमर्थित हो जाएगा और आपको एक त्रुटि मिलेगी।


फ़िल्टर दृष्टिकोण कुछ सुविधाजनक परीक्षण चयन के लिए टास्क नियमों के साथ भी जोड़ा जा सकता है
मैट व्हिपल

बड़े परीक्षण सूटों के लिए, यहां तक ​​कि अगर --testsकक्षा के भीतर एक एकल परीक्षण विधि का उपयोग करने के लिए, तो हम सभी वर्गों पर पुनरावृत्ति देखते हैं, यहां तक ​​कि उन सभी को नहीं चलाया जा रहा है, जो बहुत धीमी है। पता नहीं कि सुस्ती हमारे एनवी के कारण है या अगर यह दूसरों को प्रभावित करेगा। अधिक खोजने पर अद्यतन कर सकते हैं।
arntg

185

आप कर सकते हैं gradle -Dtest.single=ClassUnderTestTest testयदि आप एकल वर्ग का परीक्षण करना चाहते हैं या regexp का उपयोग करना चाहते हैं, तो आप इस लिंक अनुभाग 23.12 के तहतgradle -Dtest.single=ClassName*Test test परीक्षणों के लिए फ़िल्टरिंग कक्षाओं के अधिक उदाहरण पा सकते हैं । परीक्षा।


30
हाल के संस्करण (1.10 या तो से शुरू) एक --testsकमांड लाइन विकल्प का समर्थन करते हैं , जो प्रतिस्थापित करने के लिए सेट है -DtestTaskName.single
पीटर निडरविसर

58
--testविकल्प के साथ आप अपने परीक्षण वर्ग के भीतर परीक्षण को एक विधि तक सीमित कर सकते हैं। उदाहरण के लिए: आपकी कक्षा के भीतर gradle test --tests *MyTest.someMethod केवल एकल परीक्षा चलेगी । जैसा कि मैं एक परीक्षण मामले का निर्माण कर रहा हूं, मैं आमतौर पर एक ही विधि चलाता हूं ताकि यह आसान हो जाए कि मैं केवल उस आउटपुट पर ध्यान केंद्रित करूं जिसे मुझे डिबग करने की आवश्यकता है, फिर पूरे परीक्षण मामले को अंत में चलाएं। someMethodMyTest
जेफ फ्रेंच

10
यह भी ध्यान देने योग्य है कि यदि आप मल्टी-मॉड्यूल प्रोजेक्ट में एकल परीक्षण चलाना चाहते हैं, तो कमांड है gradle -D:submodule:test.single=ClassUnderTestTest :submodule:testइस चर्चा को gradle.org पर
Bulat

2
आप एक --no-rebuildविकल्प का उपयोग भी करना चाह सकते हैं , जैसे gradle -D:submodule:test.single=ClassUnderTestTest --no-rebuild :submodule:testकि निर्भरता को फिर से बनाने के लिए, और बदले में उस एकल परीक्षण को निष्पादित करने के लिए।
बाज़

2
इस विकल्प को ग्रैडल 5 में चित्रित किया गया है
ईयाल

108

यदि आपके पास मल्टी-मॉड्यूल प्रोजेक्ट है:

हमें कहने दें कि आपकी मॉड्यूल संरचना है

root-module
 -> a-module
 -> b-module

और परीक्षण (testToRun) आप चलाने के लिए देख रहे हैं बी-मॉड्यूल में है, पूर्ण पथ के साथ: com.xyz.b.module.TestClass.testToRun

जैसा कि यहां आप बी-मॉड्यूल में परीक्षण चलाने के लिए इच्छुक हैं, इसलिए आपको बी-मॉड्यूल के लिए उपलब्ध कार्यों को देखना चाहिए।

./gradlew :b-module:tasks

उपरोक्त आदेश विवरण के साथ बी-मॉड्यूल में सभी कार्यों को सूचीबद्ध करेगा। और आदर्श स्थिति में, आपके पास उस मॉड्यूल में इकाई परीक्षण चलाने के लिए परीक्षण नाम का एक कार्य होगा ।

./gradlew :b-module:test

अब, आप बी-मॉड्यूल में सभी परीक्षण चलाने के लिए बिंदु पर पहुंच गए हैं, अंत में आप परीक्षण चलाने के लिए उपरोक्त कार्य के लिए एक पैरामीटर पारित कर सकते हैं जो कुछ निश्चित पथ पैटर्न से मेल खाता है

./gradlew :b-module:test --tests "com.xyz.b.module.TestClass.testToRun"

अब, इसके बजाय अगर आप चलाते हैं

./gradlew test --tests "com.xyz.b.module.TestClass.testToRun"

यह मॉड्यूल और बी दोनों के लिए परीक्षण कार्य चलाएगा, जिसके परिणामस्वरूप विफलता हो सकती है क्योंकि मॉड्यूल में उपरोक्त पैटर्न से मेल खाने वाला कुछ भी नहीं है।


1
या बस./gradlew :b-module:test --tests testToRun
अहमद आशौर

32

बहुत समझाने के बाद, निम्नलिखित ने मेरे लिए काम किया:

gradle test --tests "a.b.c.MyTestFile.mySingleTest"


10
यह आदेश मेरे लिए काम नहीं कर रहा है। > त्रुटि: अज्ञात कमांड-लाइन विकल्प '--tests'
तारिक

31

कृपया ध्यान दें कि --testsयदि आपके पास अलग-अलग बिल्ड types/flavors(विफल रहता है Unknown command-line option '--tests') तो विकल्प काम नहीं कर सकता है । इस मामले में, विशेष परीक्षण कार्य (जैसे testProdReleaseUnitTestकि सिर्फ के बजाय test) निर्दिष्ट करना आवश्यक है


6
इस सटीक स्थिति में भाग गया धन्यवाद!
जेपीएम

क्या आप इसका पूरा उदाहरण बता सकते हैं? मैं 3 परीक्षण चलाने की कोशिश कर रहा हूं जो एक वाइल्डकार्ड का उपयोग करके मेल खाते हैं ./gradlew test --tests *testMyCollectionTake*और मैं यह नहीं बता सकता कि मुझे कैसे बदलना चाहिएtest वाइल्डकार्ड परीक्षण नाम के साथ
डैनियलकुआरा

4

नीचे gradlewकमांड लाइन विकल्प का उपयोग करके एकल टेस्ट क्लास चलाने की आज्ञा है:

gradlew.bat Connected**your bundleVariant**AndroidTest -Pandroid.testInstrumentationRunnerArguments.class=com.example.TestClass

com.example.TestClassवेरिएंट के साथ क्लास चलाने के लिए उदाहरण के नीचे Variant_1:

gradlew.bat ConnectedVariant_1AndroidTest -Pandroid.testInstrumentationRunnerArguments.class=com.example.TestClass 

2

आपको अंत में तारांकन (*) जोड़ने का प्रयास करना चाहिए।

वर्गीकृत परीक्षण - "com.abc *"


2

MyTest नामक एकल परीक्षण चलाएं:

./gradlew app:testDebug --tests=com.example.MyTest

0

मेरे मामले में, मेरा ग्रहण जावा संकलक चेतावनी बहुत अधिक निर्धारित की गई थी, और ग्रहण मेरी कक्षा को निष्पादन के लिए मान्य नहीं था। मेरी संकलक सेटिंग को अद्यतन करने से समस्या ठीक हो गई। आप इसके बारे में और अधिक यहाँ पढ़ सकते हैं: एनोटेशन-नॉनकूल-नहीं-सुलझाया जा सकता है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.