2016-10-28 20 views
7

मेरे पास जुनीट परीक्षणों का एक समूह है जो BaseTest नामक मेरी बेस टेस्ट क्लास का विस्तार करता है जो बदले में Assert बढ़ाता है। मेरे कुछ परीक्षणों में @Category(SlowTests.class) एनोटेशन है।जूनिट में श्रेणियों का उपयोग करते समय मैं कस्टम धावक का उपयोग कैसे कर सकता हूं?

मेरा BaseTest कक्षा निम्नलिखित एनोटेशन @RunWith(MyJUnitRunner.class) के साथ एनोटेटेड है।

मैंने एक ग्रैडल कार्य स्थापित किया है जो केवल SlowTests चलाने की उम्मीद है।

task integrationTests(type: Test) { 
    minHeapSize = "768m" 
    maxHeapSize = "1024m" 
    testLogging { 
     events "passed", "skipped", "failed" 
     outputs.upToDateWhen {false} 
    } 
    reports.junitXml.destination = "$buildDir/test-result" 
    useJUnit { 
     includeCategories 'testutils.SlowTests' 
    } 
} 

जब मैं काम चलाने के लिए, मेरे परीक्षण नहीं चलाए जा रहे हैं: यहाँ मेरी Gradle कार्य है। मैंने BaseTest पर कस्टम धावक MyJUnitRunner से संबंधित होने के लिए इस समस्या को निश्चित किया है। मैं अपने ग्रैडल या टेस्ट स्ट्रक्चर को कैसे स्थापित कर सकता हूं ताकि Suite का उपयोग करते समय मैं एक कस्टम धावक का उपयोग कर सकूं।

+0

मुझे लगता है कि अगर आप अपने धावक, नमूना परीक्षण या बेसटेस्ट पोस्ट करते हैं तो यह सहायक होगा। क्या यह श्रेणियों के धावक के लिए ठीक काम करता है? – MrKiller21

+0

@ श्रीकिल्लर 21 मैंने अपना जवाब संपादित किया है। कृपया नीचे देखे। –

उत्तर

3

इसका समाधान मैंने सोचा जितना छोटा और ट्रिकियर हो गया। ग्रैडल मेरे कस्टम टेस्ट रनर का उपयोग कर रहा था और filter विधि का सही ढंग से उपयोग कर रहा था। हालांकि, मेरे धावक जावास्सिस्ट एन्हांसमेंट के लिए अपने स्वयं के क्लासलोडर के माध्यम से सभी टेस्ट क्लास को पुनः लोड करते हैं।

मुद्दा यह है कि SlowTest एनोटेशन Gradle classloader के माध्यम से लोड किया गया था, लेकिन जब अपने कस्टम धावक को पारित कर दिया, धावक जाँच करता है, तो वर्ग कि एनोटेशन के साथ एनोटेट किया गया था करने के लिए यह नेतृत्व। इस चेक को सही ढंग से हल नहीं किया गया क्योंकि SlowTest की समानता दो अलग-अलग क्लासलोडर्स के माध्यम से लोड की गई थी।

-

के बाद से मैं पहले से ही शोध किया है, मैं सिर्फ यह यहाँ छोड़ देंगे। ग्रैडल और (गुप्त) जुनीट स्रोतों के माध्यम से खुदाई के दिनों के बाद, मुझे जो मिला वह है।

ग्रैडल परीक्षण वर्गीकरण को छोड़कर बस किसी भी उन्नत जुनीट कार्यक्षमता को संभाल नहीं करता है। जब आप शामिल श्रेणियों या बहिष्कृत श्रेणियों की शर्तों के साथ एक ग्रैडल कार्य बनाते हैं, तो यह एक श्रेणी फ़िल्टर बनाता है। यदि आपको पता नहीं है, तो Filter वह है जो जुनीट परीक्षण-धावक को यह तय करने के लिए देता है कि कोई परीक्षण या परीक्षण विधि फ़िल्टर की जानी चाहिए या नहीं। परीक्षण धावक को Filterable इंटरफ़ेस को लागू करना होगा।

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

Categories धावक के मामले में, जुनीट का अपना CategoryFilter है लेकिन ग्रैडल इसका उपयोग नहीं करता है, यह इसका अपना CategoryFilter उपयोग करता है। दोनों समान कार्यक्षमता को कम या कम प्रदान करते हैं और JUnit फ़िल्टर हैं ताकि किसी भी सूट द्वारा उपयोग किया जा सके जो Filterable लागू करता है।

जुनीट परीक्षण चलाने के लिए जिम्मेदार ग्रैडल में वास्तविक वर्ग को JUnitTestClassExecuter कहा जाता है। एक बार जब उसने कमांड लाइन विकल्पों को पार्स कर दिया है तो यह जांचने के लिए जूनिट से अनुरोध करता है कि धावक को परीक्षण के लिए इस्तेमाल किया जाना चाहिए। here देखा गया प्रत्येक परीक्षण के लिए यह विधि लागू की गई है।

शेष बस जुनीट तक है। ग्रैडल ने परीक्षण परिणामों का प्रतिनिधित्व करने वाली मानक XML फ़ाइलों को उत्पन्न करने के लिए अभी कस्टम RunNotifier बनाया है।

मुझे आशा है कि किसी को यह उपयोगी लगेगा और खुद को डिबगिंग के अनगिनत घंटे बचाएगा।

TLDR: आप Gradle में किसी भी धावक उपयोग कर सकते हैं। Gradle धावकों से संबंधित कोई विशिष्टता नहीं है। यह जुनीट है जिसने धावकों का फैसला किया। यदि आप जानना चाहते हैं कि आपके परीक्षण के लिए कौन से धावक का उपयोग किया जाएगा, तो आप Request.aClass(testClass).getRunner() पर कॉल करके इसे डीबग कर सकते हैं। इसे अपने कोडबेस में कहीं भी हैक करें और इसे कंसोल पर प्रिंट करें। (मैं ग्रैडल को डीबगर जोड़ने में बहुत सफल नहीं था।)

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

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