Εκμάθηση PyUnit: Python Unit Testing Framework (με Παράδειγμα)

⚡ Έξυπνη Σύνοψη

Python Η δοκιμή μονάδων ελέγχει μικρές μονάδες του κώδικά σας μεμονωμένα για να εντοπίσει σφάλματα νωρίς. Εδώ θα μάθετε τεχνικές δοκιμής μονάδων, το πλαίσιο PyUnit (unittest), τις βασικές κλάσεις του, πώς να σχεδιάσετε μια δοκιμαστική περίπτωση και ένα λειτουργικό παράδειγμα.

  • 🧪 Αυτό που είναι: Η δοκιμή μονάδων επαληθεύει μικρές, μεμονωμένες μονάδες κώδικα για την έγκαιρη ανίχνευση σφαλμάτων.
  • 🔬 Τεχνικές: Τα TDD, τα stubs και τα mocks απομονώνουν τον κώδικα, ώστε οι μονάδες να δοκιμάζονται ανεξάρτητα.
  • 🐍 PyUnit: PythonΗ ενσωματωμένη ενότητα unittest (PyUnit) είναι μια μεταφορά του JUnit.
  • 🧱 Βασικές τάξεις: TestCase, TestSuite, TestLoader, TextTestRunner και TestResults.
  • 🤖 Βοήθεια με την Τεχνητή Νοημοσύνη: Τα εργαλεία τεχνητής νοημοσύνης, όπως το Copilot, δημιουργούν άμεσα περιπτώσεις δοκιμών unittest.

Python Δοκιμή μονάδας

Τι είναι το Unit Testing;

Δοκιμή μονάδας in Python γίνεται για τον εντοπισμό σφαλμάτων νωρίς στο στάδιο ανάπτυξης της εφαρμογής όταν τα σφάλματα είναι λιγότερο επαναλαμβανόμενα και λιγότερο δαπανηρά να διορθωθούν.

Μια δοκιμή μονάδας είναι μια δοκιμή επιπέδου κώδικα σενάριο που έχει σχεδιαστεί σε Python για να επαληθεύσετε μια μικρή «μονάδα» λειτουργικότητας. Η δοκιμή μονάδας είναι ένα αντικειμενοστρεφές πλαίσιο που βασίζεται σε εξαρτήματα δοκιμής.

Python Τεχνικές Δοκιμών Μονάδων

Python Η δοκιμή μονάδας περιλαμβάνει κυρίως τη δοκιμή μιας συγκεκριμένης ενότητας χωρίς πρόσβαση σε εξαρτώμενο κώδικα. Οι προγραμματιστές μπορούν να χρησιμοποιήσουν τεχνικές όπως στελέχη και μακέτες για να διαχωρίσουν τον κώδικα σε "μονάδες" και να εκτελέσουν δοκιμές σε επίπεδο μονάδας στα μεμονωμένα κομμάτια.

  • TDD ανάπτυξης βάσει δοκιμής: Η δοκιμή μονάδας πρέπει να γίνεται μαζί με το Python, και για αυτό οι προγραμματιστές χρησιμοποιούν τη μέθοδο ανάπτυξης βάσει δοκιμής. Στη μέθοδο TDD, πρώτα σχεδιάζετε Python Η μονάδα δοκιμάζει και μόνο τότε συνεχίζετε να γράφετε τον κώδικα που θα εφαρμόσει αυτήν τη δυνατότητα.
  • Στελέχη και κοροϊδίες: Είναι δύο κύριες τεχνικές που προσομοιώνουν ψεύτικες μεθόδους που δοκιμάζονται. ΕΝΑ Στέλεχος χρησιμοποιείται για να συμπληρώσει κάποια εξάρτηση που απαιτείται για τη σωστή εκτέλεση της δοκιμής μονάδας. ΕΝΑ Κοροϊδεύω από την άλλη είναι ένα ψεύτικο αντικείμενο που εκτελεί τις δοκιμές όπου βάζουμε επιβεβαίωση.

    Οι προθέσεις και των δύο μεθόδων είναι οι ίδιες για την εξάλειψη της δοκιμής όλων των εξαρτήσεων μιας κλάσης ή μιας συνάρτησης.

Python Πλαίσιο δοκιμών μονάδων

Για να διευκολύνετε τη διαδικασία δοκιμής μονάδας και να βελτιώσετε την ποιότητα του έργου σας, συνιστάται η Python Πλαίσιο δοκιμών μονάδων. Το πλαίσιο δοκιμής μονάδας περιλαμβάνει

Python Τεχνικές Δοκιμών Μονάδων

  • PyUnit: Το PyUnit υποστηρίζει φωτιστικά, περιπτώσεις δοκιμών, σουίτες δοκιμών και δοκιμαστικό πρόγραμμα για την αυτοματοποιημένη δοκιμή του κώδικα. Στο PyUnit, μπορείτε να οργανώσετε δοκιμαστικές περιπτώσεις σε σουίτες με τα ίδια φωτιστικά
  • Μύτη: Τα ενσωματωμένα πρόσθετα του Nose σάς βοηθούν με τη λήψη εξόδου, την κάλυψη κώδικα, τις δοκιμές εγγράφων κ.λπ. Η σύνταξη της μύτης είναι αρκετά απλούστερη και μειώνει τα εμπόδια στη σύνταξη δοκιμών. Εκτείνεται Python unittest για ευκολότερη δοκιμή.
  • Doctest: Το σενάριο δοκιμής Doctest πηγαίνει σε docstring με μικρή λειτουργία στο κάτω μέρος του αρχείου. Το Doctest σάς επιτρέπει να δοκιμάσετε τον κώδικά σας εκτελώντας παραδείγματα που περιλαμβάνονται στην τεκμηρίωση και επαληθεύοντας ότι επέστρεψαν τα αναμενόμενα αποτελέσματα. Η περίπτωση χρήσης του doctest είναι λιγότερο λεπτομερής και δεν υπάρχουν ειδικές περιπτώσεις. Είναι χρήσιμα ως εκφραστική τεκμηρίωση της κύριας περίπτωσης χρήσης μιας ενότητας και των στοιχείων της.

Δοκιμή μονάδας με PyUnit

Το Pyunit είναι ένα Python λιμάνι του JUnit. Ως μέρος του Pyunit, στην ενότητα δοκιμής μονάδας υπάρχουν πέντε βασικές κατηγορίες.

Δοκιμή μονάδας με PyUnit

  • Τάξη TestCase: Η κλάση TestCase φέρει τις ρουτίνες δοκιμών και παρέχει γάντζους για την πραγματοποίηση κάθε ρουτίνας και τον καθαρισμό στη συνέχεια
  • Τάξη TestSuite: Εξυπηρετεί ως κοντέινερ συλλογής και μπορεί να διαθέτει πολλαπλά αντικείμενα δοκιμαστικής θήκης και πολλαπλά αντικείμενα δοκιμαστικών σουιτών
  • Κλάση TestLoader: Αυτή η κλάση φορτώνει δοκιμαστικές περιπτώσεις και σουίτες που ορίζονται τοπικά ή από εξωτερικό αρχείο. Εκπέμπει αντικείμενα δοκιμαστικής σουίτας που διαθέτει αυτές τις σουίτες και θήκες
  • Κλάση TextTestRunner: Για την εκτέλεση των δοκιμών, εξυπηρετεί μια τυπική πλατφόρμα για την εκτέλεση των δοκιμών
  • Η τάξη TestResults: Προσφέρει ένα τυπικό δοχείο για τα αποτελέσματα των δοκιμών

Σχεδιασμός δοκιμαστικής θήκης για Python Δοκιμή χρησιμοποιώντας PyUnit

Μια δοκιμή μονάδας παρέχει μια βασική κατηγορία, δοκιμαστική περίπτωση, η οποία μπορεί να χρησιμοποιηθεί για τη δημιουργία νέων περιπτώσεων δοκιμής. Για το σχεδιασμό της δοκιμαστικής περίπτωσης, υπάρχουν τρία σετ μεθόδων που χρησιμοποιούνται

Σχεδιασμός δοκιμαστικής θήκης για Python

unittest.TestCase

setUp()
teardown()

skipTest(aMesg:string)
fail(aMesg:string)

id():string
shortDescription():string

Στο πρώτο σετ βρίσκονται τα αγκίστρια πριν και μετά τη δοκιμή. Η μέθοδος setup() ξεκινά πριν από κάθε δοκιμαστική ρουτίνα, η teardown() μετά τη ρουτίνα.

Το δεύτερο σύνολο μεθόδων ελέγχει την εκτέλεση της δοκιμής. Και οι δύο μέθοδοι λαμβάνουν μια συμβολοσειρά μηνύματος ως είσοδο και οι δύο ακυρώνουν μια τρέχουσα δοκιμή. Αλλά η μέθοδος skiptest() ματαιώνει την τρέχουσα δοκιμή ενώ η μέθοδος fail() την αποτυγχάνει εντελώς.

Η τελευταία ή η τρίτη μέθοδος βοηθούν στον προσδιορισμό του τεστ. Η μέθοδος id() επιστρέφει μια συμβολοσειρά που αποτελείται από το όνομα του αντικειμένου δοκιμής και της ρουτίνας δοκιμής. Και η μέθοδος σύντομηDescriptΗ ion() επιστρέφει το σχόλιο docstr κατά την έναρξη κάθε ρουτίνας δοκιμής.

Python Παράδειγμα Δοκιμής Μονάδας

Το παρακάτω παράδειγμα ελέγχει μια απλή συνάρτηση add() με την ενότητα unittest. Κάθε μέθοδος που ονομάζεται με πρόθεμα test_ εκτελείται αυτόματα και η assertEqual ελέγχει το αποτέλεσμα σε σχέση με την αναμενόμενη τιμή.

import unittest

def add(a, b):
    return a + b

class TestAdd(unittest.TestCase):
    def test_add_positive(self):
        self.assertEqual(add(2, 3), 5)

    def test_add_negative(self):
        self.assertEqual(add(-1, -1), -2)

if __name__ == "__main__":
    unittest.main()

Αποθηκεύστε τον κώδικα και εκτελέστε τον με την εντολή python filename.py. Ο εκτελέστης unittest αναφέρει πόσες δοκιμές ολοκληρώθηκαν με επιτυχία ή απέτυχαν.

Πλεονεκτήματα της χρήσης Python Δοκιμή μονάδας

  • Σας βοηθά να εντοπίσετε σφάλματα νωρίς στον κύκλο ανάπτυξης
  • Σας βοηθά να γράφετε καλύτερα προγράμματα
  • Συγχρονίζεται εύκολα με άλλες μεθόδους και εργαλεία δοκιμών
  • Θα έχει πολύ λιγότερα σφάλματα
  • Είναι ευκολότερο να τροποποιηθεί στο μέλλον με πολύ λιγότερες συνέπειες

Συχνές Ερωτήσεις

Η δοκιμή μονάδων επαληθεύει μια μικρή μονάδα κώδικα, όπως μια συνάρτηση, μεμονωμένα. Εντοπίζει σφάλματα νωρίς στην ανάπτυξη, όταν είναι φθηνότερα και πιο εύκολο να διορθωθούν.

PyUnit είναι Pythonενσωματωμένο πλαίσιο δοκιμών μονάδας, διαθέσιμο ως ενότητα δοκιμής μονάδας. Είναι μια μεταφορά του JUnit και υποστηρίζει εξαρτήματα, δοκιμαστικές περιπτώσεις, σουίτες και έναν δοκιμαστικό δρομέα.

Στην υποκλάση unittest.TestCase, γράψτε μεθόδους που ξεκινούν με test_ και χρησιμοποιήστε ισχυρισμούς όπως assertEqual μέσα σε αυτές. Εκτελέστε το αρχείο με την εντολή unittest.main() για να εκτελέσετε όλες τις δοκιμές.

Η setUp() εκτελείται πριν από κάθε μέθοδο δοκιμής για την προετοιμασία των εξαρτημάτων, ενώ η tearDown() εκτελείται μετά από κάθε δοκιμή για τον καθαρισμό. Μαζί, διατηρούν τις δοκιμές ανεξάρτητες και επαναλήψιμες.

Τα stubs παρέχουν σταθερά δεδομένα από τα οποία εξαρτάται μια δοκιμή, ενώ τα mocks είναι ψεύτικα αντικείμενα στα οποία ισχυρίζεστε ότι αντιτίθεστε. Και τα δύο αντικαθιστούν τις πραγματικές εξαρτήσεις, επομένως μια μονάδα δοκιμάζεται μεμονωμένα.

Οι βοηθοί τεχνητής νοημοσύνης, όπως το GitHub Copilot, δημιουργούν περιπτώσεις δοκιμών unittest από μια συνάρτηση, προτείνουν περιπτώσεις ακμής και ισχυρισμούς και δημιουργούν προσομοιώσεις για εξαρτήσεις καθώς γράφετε κώδικα.

Ναι. Τα εργαλεία που υποστηρίζονται από την τεχνητή νοημοσύνη μπορούν να αυτοματοποιήσουν τη δημιουργία σουιτών δοκιμών, να παράγουν ισχυρισμούς για αναμενόμενα αποτελέσματα και να αυξήσουν την κάλυψη κώδικα προτείνοντας δοκιμές για μη δοκιμασμένους κλάδους.

unittest είναι PythonΤο ενσωματωμένο πλαίσιο του χρησιμοποιεί κλάσεις και μεθόδους assert, ενώ το pytest είναι μια βιβλιοθήκη τρίτου κατασκευαστή με απλούστερες εντολές assert και ισχυρά fixtures. Και τα δύο εκτελούν δοκιμές μονάδας.

Συνοψίστε αυτήν την ανάρτηση με: