2012-06-11 40 views
6

मैं PyGObject (जीटीके के लिए नए आत्मनिरीक्षण आधारित बाइंडिंग) के साथ एक छोटा/मध्यम आकार का जीयूआई एप्लीकेशन लिखने की प्रक्रिया में हूं। मैंने nose पर आधारित एक उचित परीक्षण सूट के साथ शुरुआत की जो मॉड्यूल को आयात करके और विभिन्न कार्यों को कॉल करके और परिणामों की जांच करके मेरे ऐप के अधिकांश कार्यों का परीक्षण करने में सक्षम था।क्या पाइथन में लिखित यूनिट परीक्षण जीटीके/जीएलआईबी कोड का कोई तरीका है?

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

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

मैंने पाइथन के reload() के बारे में पढ़ा है कि उम्मीदों में मॉड्यूल को पुनः लोड करने के लिए बनाया गया है कि मैं इसे अनलोड कर सकता हूं और एक नया स्टार्ट प्राप्त करने के लिए अपने ऐप को पुनः लोड कर सकता हूं, लेकिन ऐसा लगता है कि यह काम नहीं कर रहा है।

मुझे डर है कि मुझे ऐप लॉन्च करने के लिए एक उपप्रजाति के रूप में लॉन्च करना पड़ सकता है, इसके साथ झुकाव हो सकता है, फिर उपप्रजाति समाप्त हो जाती है और जब मुझे ताजा स्थिति की गारंटी होनी पड़ती है तो इसे फिर से लॉन्च करना पड़ता है। क्या वहां कोई टेस्ट फ्रेमवर्क है जो इसे आसान बना देगा, खासकर पायगोबजेक्ट कोड के लिए?

उत्तर

2

क्या mocking framework आपको कॉलबैक अलग करने में मदद करेगा? इस तरह, आप उसी स्थिति में वापस आने में सक्षम होना चाहिए जब आपने शुरू किया था। ध्यान दें कि एक SetUp() और tearDown() पैटर्न आपको वहां भी मदद कर सकता है - लेकिन मुझे लगता है कि आप पहले से ही इसका उपयोग कर रहे हैं।

+0

मुझे नहीं लगता कि मॉकिंग काफी है जो मैं ढूंढ रहा हूं। मेरे पास एक छोटा डेटासेट है जिसका उपयोग मैं मोजे के साथ परीक्षण और प्रतिस्थापित करने के लिए करता हूं, वास्तव में मेरी समस्या को ठीक नहीं करेगा, जो कि वास्तविक प्रोग्राम तर्क कोड समय-देरी कॉलबैक का उपयोग करता है जो तेजी से निष्पादित परीक्षण वातावरण में खराब व्यवहार करता है । मैं * सेटअप/टियरडाउन funcs का उपयोग कर रहा हूं, लेकिन मैं एक सफल टियरडाउन लिखने में सक्षम नहीं हूं जो वास्तव में स्मृति से प्रोग्राम को अनलोड कर सकता है और फिर इसे एक नए राज्य में पुनः लोड कर सकता है। हमेशा कॉलिंग को झुकाव होता है जो एक टेस्ट से अगले में हस्तक्षेप करता है। – robru

+0

मैं कॉलबैक का मज़ाक उड़ाते हुए सोच रहा था लेकिन यह आपकी आवश्यकताओं के लिए उपयुक्त हो सकता है या नहीं भी हो सकता है। – Sardathrion

+0

जो मैंने अभी किया है वह काम करता प्रतीत होता है कि मैन्युअल रूप से परीक्षण से कॉलबैक को कॉल करें, और फिर 'GLib.source_remove' के साथ कॉलबैक को साफ़ करने के बारे में थोड़ा और आक्रामक हो, और ऐसा लगता है कि यह काम कर रहा है। हालांकि धन्यवाद। – robru

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

  • कोई संबंधित समस्या नहीं^_^