2010-07-21 11 views
31

मैं निर्देशिका है, जो फ़ाइलें हो की तरह नामित किया है: test_foo.pyअजगर unittest और खोज

प्रत्येक फ़ाइल एक परीक्षण का मामला है।

मैं

1) कमांड लाइन से एक निर्देशिका में सभी परीक्षण चलाने के लिए चाहते हैं। मैं unittest2 का उपयोग कर रहा हूं, क्योंकि हम पाइथन 2.5.1 चला रहे हैं। इन निर्देशिकाओं में से एक ने मैंने इसे कमांड लाइन पर टाइप करने का प्रयास किया:

python -m unittest2 discover -p 'test_*.py' 

और कई अलग-अलग प्रकार। मुझे कोई त्रुटि नहीं है, लेकिन कुछ भी नहीं होता है। मैं उस निर्देशिका में सभी परीक्षण मामलों के भीतर सभी परीक्षणों को चलाने और परिणाम प्राप्त करने की उम्मीद कर रहा था।

loader = unittest2.TestLoader() 
t = loader.discover('.') 

अगर मैं t चर मुद्रित, मैं अपने परीक्षण मामलों को देख सकते हैं, लेकिन डॉक्स से मैं समझ नहीं सकता:

2) मैं भी निर्देशिका है जहाँ मैं इस किया था में एक स्क्रिप्ट होने की कोशिश की एक बार मेरे पास लोडर ऑब्जेक्ट के साथ क्या करना है।

उत्तर

23

दें कि कैसे आप अजगर < 2.7 पर कमांड लाइन से unittest2 उपयोग करने के लिए कोशिश कर रहे हैं, मुझे लगता है कि आप the note on the unittest2 PyPI page चूक गए हों:

नोट

कमांड लाइन उपयोग

अजगर 2.7 में आप python -m unittest <args> के साथ unittest कमांड लाइन सुविधाओं (परीक्षण खोज सहित) का आह्वान करते हैं। चूंकि एकजुट पैकेज है, और python -m ... के साथ पैकेजों को आमंत्रित करने की क्षमता पाइथन 2.7 में नई है, हम unittest2 के लिए ऐसा नहीं कर सकते हैं।

इसके बजाय unittest2 एक स्क्रिप्ट इकाई 2 के साथ आता है। कमांड लाइन का उपयोग:

unit2 discover unit2 -v test_module 

वहाँ भी इस स्क्रिप्ट unit2.py कहा जाता है, विंडोज के लिए उपयोगी है जो कुटिया लाइनों के बजाय फाइल एक्सटेंशन का उपयोग करता क्या कार्यक्रम के साथ फ़ाइलों को निष्पादित करने के निर्धारित करने के लिए की एक प्रति है। दोनों स्क्रिप्ट distutils द्वारा स्थापित हैं।

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

+0

धन्यवाद एलेक्स! मुझे वह नोट याद आया। और अब यह काम करता है। क्या आपने नाक का इस्तेमाल किया है? क्या आप इसकी सिफारिश करते हैं? ग्रेट किताबें बीटीडब्ल्यू, उन्हें लिखने के लिए धन्यवाद। – Aaron

+0

@ एरॉन, आपका स्वागत है! हां, मैंने अतीत में नाक का खुशी से उपयोग किया है (मुझे अभी तक पता नहीं है कि मैं _replace_ या _supplement_ को नई अनूठी कार्यक्षमता के साथ करूँगा - मैं अभी तक जो भी परिचित नहीं हूं!)। –

42

python -m unittest discover चलाते समय मैं एक ही समस्या में भाग गया। अपने सेटअप को सत्यापित करने के लिए यहां एक अच्छी जांच सूची है। Nose स्वीकृत कॉन्फ़िगरेशन के साथ अधिक लचीला है, लेकिन यह आवश्यक नहीं है।

  1. सुनिश्चित करें कि सभी फाइलें/डीआईआर test से शुरू हो जाएं।test-something.py का उपयोग करें, क्योंकि यह वैध पायथन मॉड्यूल नाम नहीं है। test_something.py का प्रयोग करें।

  2. यदि आप अपने परीक्षण एक उप-निर्देशिका में डाल रहे हैं (उदा। test/), तो सुनिश्चित करें कि आप test/__init__.py फ़ाइल बनाते हैं ताकि पायथन निर्देशिका के रूप में निर्देशिका का इलाज करे।

  3. सभी कक्षा परीक्षण मामलों की परिभाषा unittest.TestCase का विस्तार किया जाना चाहिए। उदाहरण

    लिए
    class DataFormatTests(unittest.TestCase) 
    
+0

क्या अनजाने खोज के साथ बूटस्ट्रैप स्क्रिप्ट जोड़ने का कोई तरीका है? – 010110110101

+0

इसके अलावा विधि नाम, यानी 'test_does_something (self): ' –

+1

मेरे लिए,' परीक्षण/__ init __। Py' बनाने से समस्या हल हो जाती है। – gzc

47

एक बार जब आप परीक्षण की खोज की है, तो आप एक परीक्षण धावक के साथ उन्हें चला सकते हैं।

import unittest2 
loader = unittest2.TestLoader() 
tests = loader.discover('.') 
testRunner = unittest2.runner.TextTestRunner() 
testRunner.run(tests) 

उपर्युक्त कोड चलाना परीक्षण परिणामों को मानक आउट प्रिंट करेगा।

+10

यह वही है जिसे मैं ढूंढ रहा था, और मूल प्रश्न का सबसे सीधा जवाब। हालांकि यह 2.7 में थोड़ा अलग दिखता है; 'test_loader = unittest.defaultTestLoader.discover ('।')'; फिर 'test_runner = unittest.TextTestRunner()'; फिर 'test_runner.run (test_loader) 'और आप अच्छे हैं। – Paul

+3

यदि आपको किसी कस्टम स्क्रिप्ट या 'कमांड' इंस्टेंस से प्रोग्रामर प्रोग्रामिक रूप से प्रोग्राम चलाने की आवश्यकता है, तो यह अनुशंसित दृष्टिकोण है। –

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