इसका समाधान मैंने सोचा जितना छोटा और ट्रिकियर हो गया। ग्रैडल मेरे कस्टम टेस्ट रनर का उपयोग कर रहा था और 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()
पर कॉल करके इसे डीबग कर सकते हैं। इसे अपने कोडबेस में कहीं भी हैक करें और इसे कंसोल पर प्रिंट करें। (मैं ग्रैडल को डीबगर जोड़ने में बहुत सफल नहीं था।)
मुझे लगता है कि अगर आप अपने धावक, नमूना परीक्षण या बेसटेस्ट पोस्ट करते हैं तो यह सहायक होगा। क्या यह श्रेणियों के धावक के लिए ठीक काम करता है? – MrKiller21
@ श्रीकिल्लर 21 मैंने अपना जवाब संपादित किया है। कृपया नीचे देखे। –