2012-07-22 15 views
6

मैं सैकड़ों परीक्षण मामलों के साथ सॉकेट का उपयोग कर मॉड्यूल पर काम कर रहा हूं। जो अच्छा है। सिवाय अब मैं के साथ और socket.setdefaulttimeout (60) के बिना सभी मामलों का परीक्षण करने की आवश्यकता है ... कृपया मुझे काट बता नहीं करते हैं और सभी परीक्षणों पेस्ट और सेट/सेटअप/टियरडाउन में एक डिफ़ॉल्ट टाइमआउट को हटा दें।पायथन कई सेटअप के साथ unittests?

सच में, मुझे लगता है कि प्रत्येक परीक्षण का मामला अपने आप पर बाहर रखी होने अच्छा अभ्यास है मिलता है, लेकिन मैं भी अपने आप को दोहराने के लिए पसंद नहीं है। यह वास्तव में एक अलग संदर्भ में परीक्षण नहीं है अलग-अलग परीक्षणों।

मैं देखता हूँ कि unittest मॉड्यूल स्तर सेटअप/टियरडाउन जुड़नार का समर्थन करता है, लेकिन यह मेरे लिए स्पष्ट है कि कैसे दो अलग-अलग व्यवस्था के साथ दो बार ही परीक्षण में मेरी एक परीक्षण मॉड्यूल कन्वर्ट करने के लिए नहीं है।

किसी भी मदद की बहुत सराहना की जाएगी।

उत्तर

4

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

class FixtureSuite(unittest.TestSuite): 
    def run(self, result, debug=False): 
     socket.setdefaulttimeout(30) 
     super().run(result, debug) 
     socket.setdefaulttimeout(None) 
... 
suite1 = unittest.TestSuite(testCases) 
suite2 = FixtureSuite(testCases) 
fullSuite = unittest.TestSuite([suite1,suite2]) 
unittest.TextTestRunner(verbosity=2).run(fullSuite) 
4

मैं इस तरह यह करना होगा: अपने परीक्षण के सभी अपने खुद के testcase वर्ग से निकाले जाते हैं

  1. बनाने के लिए, यह SynapticTestCase फोन करते हैं।

  2. SynapticTestCase.setUp में(), निर्धारित करने के लिए सॉकेट समाप्ति सेट या नहीं एक वातावरण चर जांच करते हैं।

  3. दो बार अपने पूरे टेस्ट स्वीट भागो, वातावरण चर के साथ एक बार फिर पुन: यह दूसरी तरह के सेट के साथ एक तरह से निर्धारित करते हैं,।

  4. एक छोटे से खोल स्क्रिप्ट लिखें टेस्ट स्वीट दोनों तरीकों से आह्वान करने के लिए।

+0

यह अच्छा लगता है, लेकिन इसे डिफ़ॉल्ट टाइमआउट के साथ और बिना स्वचालित रूप से स्वचालित रूप से चलाने के लिए स्वचालित रूप से चलाया जाना चाहिए। – underrun

+0

अपडेट किया गया: परीक्षण दोनों तरीकों से चलाने के लिए एक खोल स्क्रिप्ट या छोटे अजगर स्क्रिप्ट का उपयोग। –

1

अपने कोड तो socket.setdefaulttimeout फोन नहीं है, तो आप चला सकते हैं निम्नलिखित तरीके का परीक्षण करती है:

import socket 
socket.setdeaulttimeout(60) 
old_setdefaulttimeout, socket.setdefaulttimeout = socket.setdefaulttimeout, None 
unittest.main() 
socket.setdefaulttimeout = old_setdefaulttimeout 

यह एक हैक है, लेकिन यह

+0

इस डिफ़ॉल्ट समय बाहर के साथ यह परीक्षण करने के लिए काम करता है, लेकिन इसके बिना नहीं। मैं परीक्षण के सभी परीक्षण की आवश्यकता दोनों तरीकों से – underrun

+0

तो बस 'socket.setdefaulttimeout (OTHER_VALUE) जोड़ने; unittest.main() 'अंत तक। –