2013-05-03 11 views
6

मुझे अपने परीक्षणों के लिए निष्पादन का आदेश सेट करने की आवश्यकता है, क्योंकि मुझे दूसरों के सामने कुछ डेटा सत्यापित करने की आवश्यकता है। ऑर्डर सेट करना संभव है?पायथन पर निष्पादन आदेश unittest

class OneTestCase(unittest.TestCase): 
    def setUp(self): 
     # something to do 
    def test_login (self): 
     # first test 
     pass 
    def test_other (self): 
     # any order after test_login 
    def test_othermore (self): 
     # any order after test_login 
if __name__ == '__main__': 
    unittest.main() 

धन्यवाद

+3

यूनिट परीक्षण का मतलब है कि परीक्षण एकतापूर्ण हैं। वे एक दूसरे पर निर्भर नहीं हैं। – njzk2

+0

आप सही हैं, लेकिन फिर, जब मुझे इस तरह के व्यवहार की आवश्यकता होती है, तो परीक्षण करने का सबसे अच्छा तरीका हो सकता है, अगर मैं हर बार लॉगिन करने के लिए लॉगिन करता हूं तो बेहतर हो सकता है? यह किसी ऐसे सर्वर के लिए है जिसे कुछ और करने से पहले लॉगिन शुरू करने की आवश्यकता है, और अन्य विधियां लॉगिन – Carlos

+3

पर आधारित जानकारी पढ़ती हैं यदि आप वास्तव में तार पर वास्तविक सर्वर से बातचीत कर रहे हैं, तो आप * यूनिट * परीक्षण नहीं कर रहे हैं। – delnan

उत्तर

1

बेहतर यह मत करो।

टेस्ट स्वतंत्र होना चाहिए।

जो भी आप चाहते हैं वह करने के लिए कोड को उन कार्यों में डालना होगा जिन्हें परीक्षण द्वारा बुलाया जाता है।

कि जैसा

:

def assert_can_log_in(self): 
    ... 

def test_1(self): 
    self.assert_can_log_in() 
    ... 

def test_2(self): 
    self.assert_can_log_in() 
    ... 

या यहां तक ​​कि परीक्षण वर्ग विभाजित और सेटअप समारोह में दावे डाल करने के लिए।

class LoggedInTests(unittest.TestCase): 
    def setUp(self): 
     # test for login or not - your decision 

    def test_1(self): 
     ... 

जब मैं कक्षा मैं अक्सर अधिक और बेहतर परीक्षण लिखने क्योंकि परीक्षण को विभाजित कर रहे हैं और मैं सभी मामलों है कि परीक्षण किया जाना चाहिए के माध्यम से बेहतर देख सकते हैं अलग हो गए।

+0

लॉगिन भी परीक्षण किया जाना चाहिए, यह ठीक हो सकता है? – Carlos

+0

क्षमा करें, मुझे समझ में नहीं आता है। – User

+3

मैंने परीक्षणों को सही तरीके से लिखने के बारे में लंबी चर्चाएं पढ़ी हैं। तथ्य यह है कि, कुछ परीक्षण कुछ निश्चित राज्य पर निर्भर करते हैं, उदाहरण के लिए पिछले परीक्षण के माध्यम से बनाया जा सकता है, जो उस राज्य के निर्माण का परीक्षण करता है (जैसे लॉग इन होना)। इस राज्य को बनाना समय लेने वाली प्रक्रिया हो सकती है, इसलिए इसे फिर से उपयोग करना और परीक्षणों को चेन करना आपके परीक्षणों की अवधि को कम रखने के लिए इसके लायक हो सकता है। अन्यथा आप परीक्षण प्रक्रिया को कवर करने के लिए 100 बार लॉगिंग प्रक्रिया का परीक्षण करेंगे, जो आप लॉग इन राज्य के साथ करते हैं। इसलिए, परीक्षण अलगाव के बारे में बहुत दार्शनिक होने का अर्थ नहीं है। – Michael

18

आप इस तरह यह कर सकते हैं:

class OneTestCase(unittest.TestCase): 
    @classmethod 
    def setUpClass(cls): 
     # something to do 
     pass 

    def test_01_login (self): 
     # first test 
     pass 
    def test_02_other (self): 
     # any order after test_login 
    def test_03_othermore (self): 
     # any order after test_login 

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

टेस्ट वर्णानुक्रम हल कर रहे हैं, तो बस अपने वांछित क्रम पाने के लिए नंबर जोड़ें। शायद आप testrunner के लिए failfast = True सेट करना चाहते हैं, इसलिए जैसे ही पहला परीक्षण विफल हो जाता है, यह तुरंत विफल हो जाता है।

+3

वे कहां क्रमबद्ध हैं? क्या कोई उस पर भरोसा कर सकता है? – User

+2

unittest उन्हें वर्णमाला द्वारा विश्वसनीय रूप से प्रकार देता है। – Michael

+0

@ यूज़र पाइथन डॉक्स देखें: "ध्यान दें कि जिस क्रम में विभिन्न परीक्षण केस चलाए जाएंगे, स्ट्रिंग के लिए अंतर्निहित ऑर्डरिंग के संबंध में परीक्षण फ़ंक्शन नामों को सॉर्ट करके निर्धारित किया जाता है।" – mloskot

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