2011-12-15 13 views
6

इम अजगर में बंद कर दें और यह प्रिंट "।", "ई" या "ठीक है", "त्रुटि" और "असफल" के लिए "एफ" प्रत्येक परीक्षा के बाद होता है। मैं इसे कैसे बंद कर सकता हूं? मैं पायथन 2.7 का उपयोग कर रहा हूं और ये प्रिंट रनर क्लास से आते हैं जो में कक्षाओं को ओवरराइड करना बहुत मुश्किल लगता है क्योंकि यह सब घोंसला है।कुछ प्रिंट unittest का उपयोग कर unittest

संपादित करें: मैं केवल वर्ण ई दूर ले जाना चाहता हूँ। और एफ क्योंकि वे मेरे परीक्षणों में कुछ अन्य लॉग के रूप में एक ही समय में प्रकट नहीं होते हैं।

+0

आप ऐसा क्यों करना चाहते हैं? निश्चित रूप से परीक्षण की प्रगति को देखना उपयोगी है? –

+0

मेरे मामले में यह भ्रम जोड़ता है क्योंकि मेरे परीक्षण समानांतर में चलते हैं, मैं 1 लॉग संदेश प्रिंट करता हूं और इन परीक्षण लॉग संदेशों को संबंधित "ई" "एफ" या "।" के साथ सिंक्रनाइज़ नहीं किया जाता है। । – swan

+0

अलग-अलग प्रक्रियाओं में इन परीक्षणों को चलाने के बारे में, जो आउटपुट स्ट्रीम को अलग करेगा? –

उत्तर

1

unittest ढांचे का उपयोग कर रहे हैं (मानक, नाक ...) आधार पर, आप शब्दाडंबर कम करने के लिए कई तरह से है:

python -m unittest -h 
... 
-q, --quiet  Minimal output 
... 
+1

* "।", "ई" या "एफ" * अभी भी '-q' मोड में मुद्रित हैं। – Constantinius

+0

मैं अपने परीक्षणों को कमांड पायथन-एम के माध्यम से नहीं चलाता बल्कि इसके बजाय मैं उन्हें समानांतर में चलाता हूं: http://code.activestate.com/recipes/391414/ – swan

+0

पायथन 3.6 में '-q' दबाने लगता है पत्र, लेकिन मुझे लगता है कि यह एक बग है जो बहुत पहले तय किया गया था। पूर्ण परीक्षण विफलता आउटपुट अभी भी मुद्रित किया जाएगा। – Erhhung

9

unittest के उत्पादन में मानक त्रुटि धारा, करने के लिए लिखा है जो आप कहीं और पाइप कर सकते हैं। एक * nix बॉक्स पर यह इस तरह संभव हो जाएगा:

python -m unittest some_module 2> NUL 

आप अजगर से परीक्षण चलाते हैं:

python -m unittest some_module 2> /dev/null 

खिड़कियों पर, यह इस (धन्यवाद कार्ल Knechtel) की तरह दिखना चाहिए

import sys, os 

sys.stderr = open(os.devnull, 'w') 

... # do your testing here 

sys.stderr = sys.__stderr__ # if you still need the stderr stream 

01:, तो आप बस stderr धारा उस तरह की जगह ले सकता

चूंकि आप केवल।, एफ, ई प्रतीकों के लिए अद्यतन बंद करना चाहते हैं, तो आप डिफ़ॉल्ट रूप से ओवरराइड करके अपना खुद का TestResult कक्षा भी बना सकते हैं। मेरे मामले (अजगर 2.6) में यह इस तरह दिखेगा:

import unittest 

class MyTestResult(unittest._TextTestResult): 
    def addSuccess(self, test): 
     TestResult.addSuccess(self, test) 
    def addError(self, test, err): 
     TestResult.addError(self, test, err) 
    def addFailure(self, test, err): 
     TestResult.addFailure(self, test, err) 

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

अब हम भी एक नया TestRunner वर्ग की जरूरत है और _makeResult विधि ओवरराइड:

class MyTestRunner(unittest.TextTestRunner): 
    def _makeResult(self): 
     return MyTestResult(self.stream, self.descriptions, self.verbosity) 

इस धावक अब आप एक लॉग मुफ्त परीक्षण का आनंद ले सकते हैं।

बस एक नोट: दुर्भाग्यवश, कमांड लाइन से यह संभव नहीं है।

+0

'2> एनयूएल को खिड़कियों के लिए काम करना चाहिए यदि मैं स्पष्ट रूप से सोच रहा हूं। –

+0

'os.devnull' एक स्ट्रिंग है। क्या आपका मतलब था 'ओपन (ओ। डीव्नुल,' डब्ल्यू ')'? – jcollado

+0

@jcollado: हाँ, धन्यवाद, मुझे याद आया। – Constantinius

5

थोड़ा देर से प्रतिक्रिया, लेकिन कोई इसे उपयोगी पा सकता है। आप बदल सकते हैं। ई और एफ बंद 0 के शब्दाडंबर स्तर की स्थापना द्वारा:

testRunner = unittest.TextTestRunner(verbosity = 0) 

तुम अब भी अंतिम परिणाम और stderr में परीक्षण के अंत में संभावित त्रुटियों/अपवाद होगा।

पायथन 2.4 और 2.7 में परीक्षण किया गया।

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