पायथन में लेखन इकाई परीक्षण: मैं कैसे शुरू करूँ? [बन्द है]


533

मैंने पायथन में अपनी पहली उचित परियोजना पूरी कर ली है और अब मेरा काम इसके लिए परीक्षण लिखना है।

चूंकि यह पहली बार है जब मैंने एक परियोजना की, यह पहली बार है जब मैं इसके लिए परीक्षण लिखूंगा।

सवाल यह है कि मैं कैसे शुरू करूं? मुझे बिल्कुल पता नहीं है। क्या कोई मुझे कुछ प्रलेखन / ट्यूटोरियल / लिंक / पुस्तक की ओर इशारा कर सकता है जिसका उपयोग मैं लेखन परीक्षण से शुरू कर सकता हूं (और मुझे विशेष रूप से इकाई परीक्षण लगता है)

इस विषय पर किसी भी सलाह का स्वागत किया जाएगा।


4
अगर आपका इरादा है तो परीक्षण लिखने में कभी देर नहीं लगती। बेहतर है कि शिकायत करने वाले सभी के लिए कुछ नहीं ...
पूछें

1
यहाँ एक अच्छी टेस्ट-संचालित विकास पुस्तक है जो मुफ्त में ऑनलाइन है: chimera.labs.oreilly.com/books/1234000000754/index.html
विल

4
अच्छा संसाधन मैं https://www.jeffknupp.com/blog/2013/12/09/improve-your-python-understanding-unit-testing/ पर ठोकर खाई । अजगर के लिए एक नौसिखिया के रूप में, मुझे यह समझ में आया।
फेरी


पिछली टिप्पणी को अधिक दर्जा दिया जाना चाहिए, क्योंकि गाइड में github.com/kennethreitz/samplemod पर एक उदाहरण कोड रिपॉजिटरी भी है जो आरंभ करने के लिए एक शानदार जगह है।
सेटप्लर

जवाबों:


101

यदि आप unittests का उपयोग करने के लिए बिल्कुल नए हैं, तो सीखने का सबसे सरल तरीका अक्सर सबसे अच्छा होता है। उस आधार पर मैं डिफ़ॉल्ट मॉड्यूल केpy.test बजाय उपयोग करने की सलाह देता हूं ।unittest

इन दो उदाहरणों पर विचार करें, जो एक ही काम करते हैं:

उदाहरण 1 (एकतरफा):

import unittest

class LearningCase(unittest.TestCase):
    def test_starting_out(self):
        self.assertEqual(1, 1)

def main():
    unittest.main()

if __name__ == "__main__":
    main()

उदाहरण 2 (पाइस्टेस्ट):

def test_starting_out():
    assert 1 == 1

यह मानते हुए कि दोनों फाइलें नामित हैं test_unittesting.py , हम परीक्षण कैसे चलाते हैं?

उदाहरण 1 (एकतरफा):

cd /path/to/dir/
python test_unittesting.py

उदाहरण 2 (पाइस्टेस्ट):

cd /path/to/dir/
py.test

7
मैंने कई स्थानों पर py.test की सादगी के बारे में सुना है ( docs.python-guide.org/en/latest/writing/tests/#py-test , docs.python.org/3.5/library/unittest.html#module -unittest , jeffknupp.com/blog/2013/12/09/… ) unit-testअब भी मानक पुस्तकालय में शामिल क्यों किया गया है , अगर py.testऔर noseबहुत सरल इंटरफ़ेस के साथ समान कार्यक्षमता प्रदान करें? यह सिर्फ पश्चगामी संगतता प्रदान कर रहा है, या करता है unittestकुछ लाभ है कि है py.testऔर nosetestप्रदान नहीं कर सकते?
अल्फा_989

@ Alpha_989 मानक अजगर पुस्तकालय में उपलब्ध सर्वोत्तम उपकरणों को शामिल करने का इरादा नहीं है। यही PyPI के लिए है। मानक unittestपैकेज अभी भी काफी अच्छा है। यह मानक है जिसका अर्थ है कि यह अच्छी तरह से काम करने की गारंटी है। अंत में, जो कोई भी आपके कोड का उपयोग करता है, उसे अतिरिक्त पैकेज स्थापित करने की आवश्यकता नहीं है।
ज्येकोमन

72

नि: शुल्क पायथन पुस्तक गोता में पायथन में इकाई परीक्षण पर एक अध्याय है जो आपको उपयोगी मिल सकता है।

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

अब थोड़ी देर हो गई है, लेकिन अब आप अगली बार के लिए जानते हैं। :)


13
मैं अभी भी कहूंगा कि यदि आप कोड परीक्षण करना चाहते हैं, जिसमें इकाई परीक्षण नहीं हैं, तो आपको पहले इसके लिए इकाई परीक्षण लिखना चाहिए
ह्यूबर्ट करियो

9
हाँ, बहुत से लोग जो पहली बार एकांत में आते हैं, सुनते हैं कि "अच्छी तरह से कैसा लगता है, यह आपके वर्तमान प्रोजेक्ट के लिए बहुत देर हो चुकी है" पुराने हाथों से: भले ही वह वास्तव में कहने का मतलब नहीं है, यह वही है जो newbies सुनते हैं । यह एक पेड़ लगाने के बारे में चीनी कहावत की तरह है: परीक्षण शुरू करने का सबसे अच्छा समय एक परियोजना की शुरुआत में है; परीक्षण शुरू करने के लिए दूसरा सबसे अच्छा समय है!
जेपी

4
पायथन लिंक में डुबकी
लगाई गई है

40

मेरी राय में, तीन महान अजगर परीक्षण ढांचे हैं, जो बाहर की जाँच करना अच्छा है।
unittest - मॉड्यूल सभी अजगर वितरण
नाक के साथ मानक आता है - unittest परीक्षण चला सकता है, और कम बॉयलरप्लेट है।
pytest - भी unittest परीक्षण चलाता है, कम बॉयलरप्लेट, बेहतर रिपोर्टिंग, बहुत सारी शांत अतिरिक्त विशेषताएं हैं

इन सभी की अच्छी तुलना करने के लिए, http://pythontesting.net/start-here पर प्रत्येक के लिए परिचय के माध्यम से पढ़ें ।
जुड़नार पर विस्तारित लेख भी हैं, और वहाँ भी।


35

एकतरफा के लिए डॉक्स शुरू करने के लिए एक अच्छी जगह होगी।

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


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

27

unitest मानक पुस्तकालय के साथ आता है, लेकिन मैं आपको nosetests पुनः शामिल करूंगा ।

" नाक परीक्षण को आसान बनाने के लिए एकतरफा विस्तार करता है। "

मैं भी तुम्हें pylint recomend होगा

" पायथन स्रोत कोड का विश्लेषण करता है जो खराब गुणवत्ता के कीड़े और संकेतों की तलाश करता है। "


8

जैसा कि अन्य लोगों ने पहले ही जवाब दिया था, यूनिट टेस्ट लिखने में देर हो चुकी है, लेकिन बहुत देर नहीं हुई है। सवाल यह है कि आपका कोड टेस्ट करने योग्य है या नहीं। वास्तव में, मौजूदा कोड को परीक्षण के तहत रखना आसान नहीं है, यहां तक ​​कि इस बारे में एक पुस्तक भी है: लिगेसी कोड के साथ प्रभावी रूप से कार्य करना ( प्रमुख बिंदुओं या अग्रदूत पीडीएफ देखें) )।

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


2
+1 के लिए "लिगेसी कोड के साथ प्रभावी रूप से कार्य करना"। यह सब कोड के बारे में है जिसमें परीक्षण नहीं हैं।
डेविड

3

अजगर में इकाई-परीक्षण के लिए शानदार समाधान है। यह दोनों unittest आधारित testcases और सिद्धांत का समर्थन करता है, और आप इसे केवल साधारण कॉन्फिग फाइल के साथ शुरू करते हैं।


आपका नोसेटेस्ट लिंक अप्रचलित है। ऐसा लगता है कि नया स्थान है: nose.readthedocs.org/en/latest
odigity

1
गितुब और नवसिखुआ वेबसाइट पर प्रलेखन के अनुसार, noseऔर nose2मेनटेनेंस मोड में हैं। इसकी शुरुआत बेहतर है py.testक्योंकि इसका बहुत अधिक समर्थन है
अल्फा_989
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.