अस्थायी रूप से व्यक्तिगत पायथन इकाई परीक्षणों को अक्षम करें


128

unittestपायथन में मॉड्यूल का उपयोग करते समय व्यक्तिगत इकाई परीक्षणों को अस्थायी रूप से कैसे अक्षम किया जा सकता है ?

जवाबों:


230

व्यक्तिगत परीक्षण विधियों या कक्षाएं दोनों को unittest.skipडेकोरेटर का उपयोग करके अक्षम किया जा सकता है ।

@unittest.skip("reason for skipping")
def test_foo():
    print('This is foo test case.')


@unittest.skip  # no reason needed
def test_bar():
    print('This is bar test case.')

अन्य विकल्पों के लिए, स्किपिंग परीक्षणों और अपेक्षित विफलताओं के लिए डॉक्स देखें ।


9
पायथन 3 में, @unittest.SkipTest@unittest.skip
आकिफ

7
मैं पाइथन 3.6.1 का उपयोग कर रहा हूं और @unittest.skipठीक भी काम करता हूं ।
पीट

2
@ पेथ, 3.4.0 में, @unittest.skipकाम नहीं करता है।
लाइफबैलेंस

बच्चे की कक्षाओं को कैसे रोका जा सकता है?
रीबिएन्जोन

एनोटेशन केवल एक ही परीक्षण विधि पर लागू होगा। क्या आप परीक्षण विधियों के साथ एक अभिभावक वर्ग रखने का इरादा रखते हैं, और केवल कुछ बाल वर्गों में विधि अक्षम है? मुझे लगता है कि यह संभव है, हालांकि आपको उचित रूप से माता-पिता / बच्चे की कक्षाएं डिजाइन करने की आवश्यकता हो सकती है। क्या आप उस परिदृश्य को याद कर सकते हैं जिसे आप एक खिलौना उदाहरण के साथ हल करने की कोशिश कर रहे हैं?
योनी

26

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

def disabled(f):
    def _decorator():
        print f.__name__ + ' has been disabled'
    return _decorator

@disabled
def testFoo():
    '''Foo test case'''
    print 'this is foo test case'

testFoo()

आउटपुट:

testFoo has been disabled

11

नवीनतम संस्करण (2.7 - अप्रकाशित) टेस्ट स्किपिंग / अक्षम करने का समर्थन करता है । आप बस इस मॉड्यूल को प्राप्त कर सकते हैं और इसे अपने मौजूदा पायथन इंस्टॉल पर उपयोग कर सकते हैं। यह शायद काम करेगा।

इस से पहले, मैं परीक्षण मैं चाहता था करने के लिए छोड़ दिया नाम बदलने के लिए प्रयोग किया जाता है xtest_testnameसे test_testname


यहाँ यह करने के लिए एक त्वरित लिपि है। मेरी योग्यता थोड़ी कठोर है, इसलिए इसके लिए किसी भी समस्या के लिए मैं पहले से माफी चाहता हूं। Untested।

  (defun disable_enable_test ()
  (interactive "")
  (save-excursion
    (beginning-of-line)
    (search-forward "def")
    (forward-char)
    (if (looking-at "disable_")
    (zap-to-char 1 ?_)
      (insert "disable_"))))

+1, लेकिन पूरे प्रोजेक्ट में, जो मैं सबके लिए काम कर रहा हूं, अजगर v2.6.2 का उपयोग कर रहा है, और मुझे नहीं लगता कि यह बदल जाएगा: /, लेकिन यह एक समाधान है, धन्यवाद
coelhudo

आप अपने संपादक को एक
टेस्टकेस

मैं एक Emacs उपयोगकर्ता हूं, क्या आपने एक मैक्रो बनाया है?
coelhudo

नहीं। मैंने उन्हें असफल होने दिया लेकिन यह इतना कठिन नहीं है। मैंने उत्तर को शीघ्र के साथ अद्यतन किया है।
नौफल इब्राहिम

यह स्वीकृत उत्तर केवल एक लिंक नहीं है। वास्तविक, वर्तमान उत्तर शीर्ष मतदाता भी नहीं है। दी, यह 4 साल पुराना है। कृतज्ञता केवल इतना ही कहती है।
jwd630 22

10

बस @unittest.SkipTestडेकोरेटर को टेस्ट से ऊपर रखना पर्याप्त है।


मुझे नहीं पता कि यह किसने किया। लेकिन, मैं प्रलेखन पढ़ रहा था और यह कहता है कि स्किपटेस्ट एक अपवाद है। किसी भी तरह से, यह इस मायने में अलग है कि unitest.skip इस बात पर निर्भर करता है कि स्किप कभी भी टेस्ट को निष्पादित नहीं करता (इसे अक्षम कर रहा है), जबकि स्किपटेस्ट का उद्देश्य यह है कि यदि टेस्ट नहीं हो रहा है तो कुछ अपेक्षित नहीं है। क्या मैं सही हू? दिलचस्प कठिन है।
coelhudo

unittest.skip(बिना कारण) मुझे पाइथन 2 में त्रुटि देता है, लेकिन पाइथन 3 में नहीं।
अकीफ

5

मैं केवल एक अंडरस्कोर के साथ एक टेस्ट केस विधि का नाम बदल देता हूं: test_myfunc _test_myfunc बन जाता है।


3

डॉक्स 2.1 के लिए एक उपेक्षा या छोड़ विधि निर्दिष्ट नहीं करते।

आमतौर पर, मैं जरूरत पड़ने पर टिप्पणी ब्लॉक कर देता हूं।


1

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

मेरे उपयोग के मामले के लिए, समाधान टेस्ट रनर में निहित है, टेस्ट कोड में नहीं। मैं पाइस्टेस्ट का उपयोग करता हूं । पाइस्टेस्ट के साथ, कमांड लाइन से एकल टेस्ट निर्दिष्ट करना आसान है:

pytest PYTHON_FILENAME.TEST_CLASS.TEST_NAME

(अपने मूल्यों के साथ कैप को बदलें)।

मैं समझता हूं कि यह प्रश्न अजगर-इकाई के लिए था। मैंने लंबे समय में इसका इस्तेमाल नहीं किया है। मुझे आश्चर्य नहीं होगा अगर इसमें कुछ ऐसा ही था। यदि नहीं, तो आप आसानी से pytest पर जा सकते हैं। आपको अपना कोड संशोधित करने की आवश्यकता नहीं है। बस इसे इंस्टॉल करें और अपने टेस्ट रनर कमांड को बदलें।

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

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