2010-03-03 12 views
10

कुछ चर (वैश्विक Django.test.TestCase फ्रेमवर्क का उपयोग करके) कुछ चर के वैश्विक प्रारंभ करने के लिए कुछ तरीका है, ताकि यह केवल एक बार हो।django परीक्षण ढांचे में वैश्विक स्थापित?

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

मैं परीक्षण धावक ढांचे को फिर से लिखना नहीं चाहता हूं।

मैं रुबी/आरएसपीसी दुनिया में पहले (: सभी) के समान कुछ सोच रहा हूं।

एस

उत्तर

2

आप "पूरे परीक्षण धावक ढांचा फिर से लिखने" की जरूरत नहीं है, लेकिन आप एक कस्टम test_runner बनाने की आवश्यकता होगी (आप बस copy the existing one कर सकते हैं और इसे संशोधित अपने वैश्विक सेटअप कोड शामिल करने के लिए) । यह कोड की लगभग 100 लाइनें है। फिर TEST_RUNNER सेटिंग को अपने कस्टम धावक को इंगित करने के लिए सेट करें और दूर जाएं।

+0

सही - मैं एक कस्टम टेस्ट धावक से बचने की कोशिश कर रहा था - ऐसा नहीं लगता कि मेरे पास कोई विकल्प हो। जितना अधिक मैं Django के साथ काम करता हूं, उतना ही मुझे रेल याद आती है। हालांकि पाइथन के पास बेहतर वैज्ञानिक लाइब्रेरी समर्थन है, इसलिए मुझे लगता है कि मैं इसके साथ रह सकता हूं। – shreddd

+1

मुझे लगता है कि परीक्षण धावक पुराने Django संस्करणों में कोड की 15-30 लाइनों की तरह होता था, इसलिए संभवतः उन्होंने इसे कॉपी करने और एक नया निर्माण करने के लिए एक बड़ा सौदा नहीं माना। यह पूरी कक्षा में बदल गया और बाद के संस्करणों में आकार में वृद्धि हुई। आप हमेशा एक नया नया धावक (एक अतिरिक्त सेटिंग या वैश्विक सिग्नल) निर्दिष्ट किए बिना कुछ अतिरिक्त सेटअप कोड (शायद setup_test_environment() में) चलाने के लिए एक तरीके से जोड़ने के लिए एक सुविधा अनुरोध का सुझाव दे सकते हैं? –

+0

युक्तियों के लिए फिर से धन्यवाद - मैं setUp() की लाइनों के साथ ऐसा करने के लिए एक अच्छा घोषणात्मक तरीका ढूंढ रहा था, लेकिन ऐसा लगता है कि मुझे एक रनर को रिग करना पड़ सकता है। एक सुविधा अनुरोध समझ में आता है। – shreddd

0

क्या स्थैतिक चर के साथ एक वर्ग के बारे में? कुछ की तरह:

class InitialSetup(object): 
    GEOLOCATOR = GeoLocator() 
    DEFAULT_LOCATION = GEOLOCATOR.get_geocode_object(settings.DEFAULT_ADDRESS, with_country=True) 

    def setUp(self): 
     self.geolocator = InitialSetup.GEOLOCATOR 
     self.default_location = InitialSetup.DEFAULT_LOCATION 
     p = Page.objects.create(site_id=settings.SITE_ID, template='home_page.html') 
     p.publish() 
     self.client = Client() 


class AccessTest(InitialSetup, Testcase): # Diamond inheritance issue! inheritance order matters 
    def setUp(self): 
     super(AccessTest, self).setUp() 


    def test_access(self): 
     # Issue a GET request. 
     response = self.client.get('/') 

     # Check that the response is 200 OK. 
     self.assertEqual(response.status_code, 200) 
+1

हाय माज़ज़ा - हाँ कोई समस्या के आसपास हैक कर सकता है स्थैतिक या कक्षा चर स्थापित करना। हालांकि, मैं एक घोषणात्मक अंतर्निहित समाधान की तलाश में था। ऐसा लगता है कि यह सेटअप क्लास() फ़ंक्शन के साथ अजगर के नए संस्करणों में आंशिक रूप से हल किया गया है। – shreddd

2

यह आंशिक रूप से setUpClass (द्वारा अजगर/Django के नए संस्करण में संबोधित किया जाता है), जो कम से कम मुझे श्रेणी स्तर सेटअप को चलाने के लिए अनुमति देगा।

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