2010-03-16 4 views
9

क्या पीईयूनीट (यूनिटस्ट मॉड्यूल) यूनिट परीक्षणों को चलाने के लिए आईडीएलई के भीतर कोई तरीका है?पाइथन पायनिट यूनिट परीक्षण चलाने के लिए आईडीईई का उपयोग

मैं पूछता हूँ क्योंकि मैं एक छोटी परीक्षण मॉड्यूल है और जब मैं Cygwin से अजगर mymodule.py साथ इसे चलाने के शैल मैं सभी परीक्षण पारित कर दिया हो, लेकिन जब मैं निष्क्रिय से Run-> चलाएँ मॉड्यूल का उपयोग परीक्षण पास लेकिन फिर मैं अपवाद प्राप्त करें (SystemExit: गलत)।

#!/usr/bin/python 

import unittest 

class fooTests(unittest.TestCase): 

    def setUp(self): 
     self.foo = "bar" 

    def testDummyTest(self): 
     self.assertTrue(True) 

    def testDummyTestTwo(self): 
     self.assertEquals("foo", "foo") 


    def tearDown(self): 
     self.foo = None 

if __name__ == '__main__': 
    unittest.main() 

जब मैं अजगर के साथ Cygwin खोल से चलाने fooTests.py यह पैदा करता है:

उदाहरण के लिए, यहाँ एक नमूना परीक्षण मॉड्यूल इस पुन: पेश करने के लिए है

$ python fooTests.py 
.. 
---------------------------------------------------------------------- 
Ran 2 tests in 0.000s 

OK 

लेकिन जब मैं 'm संपादन fooTests.py निष्क्रिय भीतर और मुझे क्या करना भागो -> भागो मॉड्यूल, नई पायथन शैल निष्क्रिय द्वारा पैदा की उत्पादन करता है:

>>> ================================ RESTART ================================ 
>>> 
.. 
---------------------------------------------------------------------- 
Ran 2 tests in 0.031s 

OK 

Traceback (most recent call last): 
    File "C:\Some\path\info\I\shortened\fooTests.py", line 20, in <module> 
    unittest.main() 
    File "C:\Python26\lib\unittest.py", line 817, in __init__ 
    self.runTests() 
    File "C:\Python26\lib\unittest.py", line 865, in runTests 
    sys.exit(not result.wasSuccessful()) 
SystemExit: False 
>>> 

इस ट्रेसबैक का उत्पादन करने के लिए मैं क्या गलत कर रहा हूं, और विशेष रूप से मैं इसे कैसे ठीक कर सकता हूं ताकि मैं इकाई परीक्षणों को जल्दी से चलाने के लिए आईडीएलई के भीतर रन-> रन मॉड्यूल (या F5) कर सकूं?

(यह निश्चित रूप से एक साधारण सवाल किया जाना चाहिए, लेकिन मेरे त्वरित यह पता लगाने की प्रयास निरर्थक साबित हुए हैं।)

उत्तर

7

कोई भी उत्तर नहीं दिया (मुझे लगता है कि अगर वहाँ पहले कुछ मिनट में किसी भी उत्तर नहीं हैं, एक उत्तर की संभावना काफी नीचे आती है :), इसलिए मैंने इसे स्वयं खोजना जारी रखा।

सुनिश्चित नहीं हैं कि अगर यह सबसे सुरुचिपूर्ण समाधान है या नहीं, लेकिन बदल रहा है:

if __name__ == '__main__': 
    unittest.main() 

को
if __name__ == '__main__': 
    try: unittest.main() 
    except SystemExit: pass 

चाल करने के लिए लग रहा था।

मुझे लगता है कि समस्या यह है कि (http://coding.derkeiler.com/Archive/Python/comp.lang.python/2003-11/0239.html के अनुसार) unittest मॉड्यूल sys.exit को कॉल करके समाप्त होता है जो स्पष्ट रूप से आईडीईएल के लिए समस्याग्रस्त है क्योंकि यह पाइथन खोल चलाना चाहता है, जबकि जब आप इसे चलाने से कोई समस्या नहीं होती है कमांड लाइन, जो आपको पहले से चलने वाली कमांड लाइन पर वापस डंप करने की अपेक्षा करती है।

मुझे नहीं पता कि यह समाधान क्या है, सिस्टमएक्सिट ईवेंट को पकड़कर और इसे अनदेखा करना, समस्याग्रस्त है, लेकिन ऐसा लगता है कि यह सभी परीक्षण-पास और कुछ परीक्षण-विफल मामलों के लिए काम करता है।

इसके अलावा: यह StackOverFlow पोस्ट देखें: What code can I use to check if Python is running in IDLE?, जो यह देखने के लिए एक परीक्षण प्रदान करता है कि प्रोग्राम आईडीईएल के भीतर से चलाया जा रहा है या नहीं।

+0

कोशिश/छोड़कर रिटर्न कोड खा सकता है, इसलिए यदि सीआई पर्यावरण में कोड का परीक्षण किया जाता है तो समस्या हो सकती है। हालांकि, जानकारी आसान है: यूनिटस्ट मॉड्यूल sys.exit को कॉल करता है, जब एक इंटरैक्टिव शैल खुला रहता है (यानी निष्क्रिय, Emacs पायथन खोल आदि), तो यह अपवाद दिखाया गया है। –

1

कुछ इस तरह भी काम करना चाहिए:

suite = unittest.TestLoader().loadTestsFromTestCase(fooTests) 
unittest.TextTestRunner(verbosity=2).run(suite) 

मैंने पाया कि here, और यह मेरे लिए काम किया।

9

तुम भी

if __name__ == '__main__': 
    unittest.main(exit=False) 

अगर आप अजगर> = 2 का उपयोग कर रहे कर सकते हैं।7