2011-08-11 16 views
6

काम नहीं कर रहा unittest साथ आरंभ करने के लिए कोशिश कर रहा हूँ, लेकिन मैं एक समस्या काम करने के लिए setUpClass() हो रही हो रहा है। यहाँ अपने परीक्षण कोड ...unittest setUpClass

import unittest 

class TestRepGen(unittest.TestCase): 
    """ Contains methods for training data testing """ 

    testvar = None 

    @classmethod 
    def setUpClass(cls): 
     cls.testvar = 6 

    def test_method(self): 
     """ Ensure data is selected """ 
     self.assertIsNotNone(self.testvar,"self.testvar is None!") 

# run tests 
if __name__ == '__main__': 
    unittest.main() 

ज़ोर त्रुटि संदेश प्रदर्शित होता है, कि self.testvar == None का संकेत है, और setUpClass() द्वारा बदला नहीं गया है है। क्या मेरे कोड में कुछ गड़बड़ है?

अगर मैं अपने आईडीई (विंग), या सीधे कमांड लाइन से भीतर से कोड को चलाने मैं एक ही परिणाम मिलता है। रिकॉर्ड के लिए, मैं विंडोज 7 के तहत पायथन 3.2.1 का उपयोग कर रहा हूं।

+0

मैंने विंडोज 7 के तहत पायथन 2.7 पर अपना कोड आजमाया है। यह ठीक काम करता है; परीक्षण पास हो जाता है। अगर आप उपरोक्त स्क्रिप्ट _exactly_ चलाते हैं, तो क्या यह वास्तव में आपके लिए काम नहीं करता है? पायथन 3.3 के लिए दस्तावेज़ 'setUpClass' के व्यवहार में कोई परिवर्तन नहीं दर्शाते हैं। – agf

+0

आपके द्वारा चिपकाया गया कोड python27 और python 3.2.1 में विंडोज 7 पर काम करता है। – stderr

+0

क्या आपके पास एक कारण है कि आप setUpClass का उपयोग कर रहे हैं? क्यों नहीं बस 'def setUp (self)'? – Bogdan

उत्तर

1

ठीक है - यह हाथ-अप समय स्वीकार करने के लिए है कि यह मेरी गलती थी। मैं 3.1.2 का उपयोग कर रहा था जब मुझे 3.2.1 का उपयोग कर (और सोचा था कि) था। अब मैं सही संस्करण में बदल गया हूं, सब ठीक है और परीक्षण गुजर रहा है। (अपना समय बर्बाद करने के लिए :-(और खेद) सभी जो जवाब दिया बहुत धन्यवाद।

5

मुझे लगता है कि करने के लिए आप इस परीक्षण वर्ग को सीधे फ़ोन नहीं कर रहे हैं, लेकिन एक व्युत्पन्न वर्ग जा रहा हूँ।

अगर ऐसी बात है, तो आप मैन्युअल setUpClass() अप करने के लिए कॉल करने के लिए है - यह स्वचालित रूप से कहा जाता है नहीं है।

class TestB(TestRepGen): 
    @classmethod 
    def setUpClass(cls): 
     super(TestB, cls).setUpClass() 

इसके अलावा, the docsclass-level fixtures are implemented by the test suite को accoding। इसलिए, यदि आप TestRepGen या test_method कुछ अजीब तरह से आप पोस्ट नहीं किए जा कॉल कर रहे हैं, setUpClass नहीं रन मिल सकता है।

+0

एएफएफ - मैं कक्षा को सीधे कॉल कर रहा था, लेकिन आखिरकार इसे उप-वर्गीकृत किया जा रहा था, इसलिए आपकी टिप्पणियां उपयोगी हैं। धन्यवाद। –

+0

@Alan - आपको अपना समाधान एक उत्तर के रूप में पोस्ट करना चाहिए और इसे स्वीकार करना चाहिए। – agf

+0

समाधान पोस्ट किया गया। –

10

setUpClass 2.7 और 3.2 के रूप में unittest ढांचे के लिए नया है। आप एक पुराने संस्करण के साथ उपयोग करना चाहते हैं आप का उपयोग करने की आवश्यकता होगी नाक की बजाय आपके टेस्ट रनर के रूप में नाक।

+0

अच्छा पकड़ो! मैं सोच रहा था कि SetUpClass क्यों काम नहीं कर रहा था। – fthinker

+0

* zope.testing * का testrunner 'setUpClass() 'का समर्थन नहीं करता है। – jnns

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