Η δοκιμή λογισμικού είναι μια διαδικασία που αξιολογεί τις μετρήσεις των προγραμμάτων χρησιμοποιώντας εργαλεία, σενάρια ή χειροκίνητα.

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

Μπορείτε να αποτρέψετε και να διορθώσετε σφάλματα γράφοντας δοκιμές, αξιολογώντας την απόδοση του προγράμματος και αυτοματοποιώντας τις ροές εργασίας.

Ξεκινώντας με το Testing in Go

Η τυπική βιβλιοθήκη Go παρέχει μια εξελισσόμενη δοκιμές πακέτο. ο δοκιμές Το πακέτο έχει συγκριτική αξιολόγηση, ασάφεια, παράβλεψη, υποδοκιμή, δευτερεύουσα συγκριτική αξιολόγηση και άλλες λειτουργίες.

Η δοκιμή με αυτό το πακέτο είναι εύκολη. Ακολουθεί μια απλή δομή δοκιμής που θα χρησιμεύσει ως μοντέλο για τη δοκιμή:

τύπος Υποθέσεις struct {
// η αναμενόμενη έξοδος της δοκιμής
αναμενόμενος ενθ

// η έξοδος της συνάρτησης
πραγματικός ενθ

// την τιμή που μεταβιβάζετε στη συνάρτηση
διαφωνία σειρά
}

Ακολουθεί μια απλή συνάρτηση που μετατρέπει τις συμβολοσειρές σε ακέραιους αριθμούς. Η δοκιμή σας θα δοκιμάσει αυτή τη λειτουργία.

instagram viewer

εισαγωγή (
"strconv"
)

funcStringToInteger(στρ σειρά)ενθ {
ακέραιος, err := strconv. Atoi (οδός)

αν λάθος!= μηδέν {
ΕΠΙΣΤΡΟΦΗ0
}

ΕΠΙΣΤΡΟΦΗ ακέραιος αριθμός
}

ο StringToInteger επιστρέφει η συνάρτηση 0 εάν υπάρχει σφάλμα στη μετατροπή και ο ακέραιος εάν δεν υπάρχουν σφάλματα.

Ακολουθεί μια δοκιμαστική συνάρτηση για το StringToInteger:

funcTestStringToInteger(δοκιμή *δοκιμή. Τ) {
expectInt := StringToInteger("3")

caseInstance := Περιπτώσεις {
αναμενόμενο: αναμενόμενοInt,
πραγματικός: 3,
}

αν caseInstance.expected == caseInstance.actual {
// κάποιο κώδικα εδώ
} αλλού {
δοκιμή. Αποτυγχάνω()
}
}

ο TestStringToInteger η δοκιμαστική λειτουργία δέχεται α δοκιμή. Τ αντικείμενο ως επιχείρημά του. ο αναμενόμενοInt μεταβλητή κρατά το αποτέλεσμα της μετατροπής συμβολοσειράς. ο caseInstance μεταβλητή είναι η δομή Cases για τη δοκιμή. ο αν Η δήλωση συγκρίνει τις αναμενόμενες και τις πραγματικές τιμές.

ο Αποτυγχάνω Η μέθοδος επιστρέφει μια αποτυχημένη δοκιμή στην πρόταση else εάν οι τιμές δεν είναι ίσες.

Το Go παρέχει α δοκιμή εντολή για την αυτοματοποίηση και την ανάκτηση πληροφοριών σχετικά με τις δοκιμές και τα προγράμματά σας.

πηγαίνω δοκιμή
πηγαίνω δοκιμή βοήθειας

Η σελίδα βοήθειας παρέχει λεπτομερείς πληροφορίες για το πώς πήγαινε δοκιμή έργα:

Το οικοσύστημα Go φιλοξενεί πολλές βιβλιοθήκες που κάνουν τις δοκιμές πιο προσιτές και ευέλικτες. Υπάρχει άφθονη λειτουργικότητα πέρα ​​από το δοκιμές πακέτο, συμπεριλαμβανομένων παλινδρόμηση και δοκιμή μονάδας.

Το πακέτο κατάθεσης

Το πακέτο Testify είναι ένα από τα πιο δημοφιλή πλαίσια Go για δοκιμή πακέτων. Παρέχει εργαλεία που θα χρειαστείτε για να γράψετε αποτελεσματικά τεστ, με εύκολες διαβεβαιώσεις, κοροϊδίες και δοκιμές λειτουργιών σουίτας.

Το Testify είναι κατάλληλο για ανάπτυξη βάσει δοκιμής, καθώς το πακέτο παρέχει α κοροϊδεύω πακέτο. Αυτό παρέχει έναν μηχανισμό για τη σύνταξη εικονικών αντικειμένων που μπορείτε να χρησιμοποιήσετε στη θέση πραγματικών αντικειμένων στη δοκιμή.

Το πακέτο παρέχει επίσης:

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

Η κατάθεση εκτείνεται στο δοκιμές πακέτο και μπορείτε να χρησιμοποιήσετε το πήγαινε δοκιμή εντολή για εκτέλεση δοκιμών γραμμένων με το πακέτο Testify.

Το Testify υποστηρίζει εκδόσεις Go από την 1.13. Μπορείτε να προσθέσετε το πακέτο ως εξάρτηση έργου με αυτήν την εντολή:

πηγαίνω λάβετε το github.com/stretchr/testify

Ακολουθεί μια απλή δοκιμή ισχυρισμού με το πακέτο Testify διεκδικώ πακέτο:

πακέτο κύριος

εισαγωγή (
"δοκιμή"
"github.com/stretchr/testify/assert" // βεβαίωση μόνο πακέτου
)

// Το όνομα της συνάρτησης πρέπει να είναι "Something" κατά σύμβαση
funcΔοκιμή Κάτι(t *δοκιμή. Τ) {
// επιβεβαίωση της ισότητας
διεκδικώ. Ίσο (t, 123, 123, "πρέπει να είναι ίσοι")

// επιβεβαίωση ανισότητας
διεκδικώ. NotEqual (t, 123, 456, "δεν πρέπει να είναι ίσοι")
}

ο Δοκιμή Κάτι Η συνάρτηση δοκιμής παίρνει τη δομή τύπου δοκιμής του δοκιμές πακέτο ως επιχείρημα. ο Ισος και NotEqual Οι μέθοδοι είναι για ισχυρισμούς που βασίζονται στην ισότητα και την ανισότητα από το Testify's διεκδικώ πακέτο.

Το πακέτο GoConvey

GoConvey είναι ένα εργαλείο δοκιμών Go που έχει σχεδιαστεί για εκφραστικότητα πάνω από το δοκιμές πακέτο. Περιλαμβάνει τερματικό (CLI) και πρόγραμμα περιήγησης (GUI) δοκιμαστική λειτουργικότητα.

Το πακέτο GoConvey ενσωματώνεται με το δοκιμές πακέτο, παρέχοντας μια διεπαφή χρήστη Ιστού για εργασία με εγγενείς δοκιμές Go. Περιλαμβάνει επίσης λειτουργικότητα για δοκιμές παλινδρόμησης, προσαρμόσιμες εξόδους και δημιουργία κώδικα δοκιμής. Μπορείτε να εκτελέσετε δοκιμές αυτόματα, να αποκτήσετε πρόσβαση σε μορφές κάλυψης σε HTML και να προσαρμόσετε το GUI.

Εκτελέστε αυτήν την εντολή στο τερματικό του χώρου εργασίας Go για να εγκαταστήσετε το πακέτο Go Convey.

πηγαίνω λάβετε το github.com/smartystreets/goconvey

Ακολουθεί ένα απλό παράδειγμα δοκιμών γραφής με το πακέτο GoConvey.

πακέτο κύριος

εισαγωγή (
. "github.com/smartystreets/goconvey/convey"
"δοκιμή"
)

funcΔοκιμή Κάτι(t *δοκιμή. Τ) {
// Περάστε t μόνο σε κλήσεις Μεταβίβασης ανώτατου επιπέδου
Convey("Declare variable", t, func() {
x := 1

Convey("increment variable", func() {
x++

Μεταφέρω ("επιβεβαιώστε την ισότητα", func() {
Άρα (x, ShouldEqual, 2)
})
})
})
}

Θα χρειαστεί να εισαγάγετε το μεταφέρω, εκφράζω πακέτο χρησιμοποιώντας σημειογραφία κουκκίδων για τη δοκιμή.

Η συνάρτηση Convey από το Μεταφέρω, εκφράζω Το πακέτο βοηθά με τον προσδιορισμό του πεδίου εφαρμογής της δοκιμής. Το τελευταίο Μεταφέρω, εκφράζω Η κλήση συνάρτησης στο παράδειγμα κώδικα επιβεβαιώνει την ισότητα μεταξύ των Χ μεταβλητή και 2, χρησιμοποιώντας το Πρέπει Ίσο λειτουργία.

Το πακέτο προσδοκίας HTTP

ο HTTP Expect Το πακέτο είναι ένα εύχρηστο, συνοπτικό, δηλωτικό πακέτο για τις δοκιμές από άκρο σε άκρο HTTP και REST API της Go. Μπορείτε να το χρησιμοποιήσετε για να δημιουργήσετε αιτήματα HTTP σταδιακά και να επιθεωρήσετε τις απαντήσεις και τα ωφέλιμα φορτία τους αναδρομικά.

ο httpπροσδοκώ Το πακέτο είναι ένα σύνολο αλυσίδων δημιουργίας για αιτήματα HTTP και ισχυρισμούς σχετικά με τις αποκρίσεις και τα ωφέλιμα φορτία HTTP. Είναι χτισμένο πάνω στο http, δοκιμέςκαι άλλα πακέτα. Το πακέτο λειτουργεί επίσης καλά με το ενσωματωμένο httptest πακέτο.

httpπροσδοκώ παρέχει λειτουργικότητα για δημιουργία αιτημάτων με κατασκευή URL, κεφαλίδες, cookie και ωφέλιμα φορτία. Διαχειρίζεται ισχυρισμούς απόκρισης, ισχυρισμούς ωφέλιμου φορτίου, όμορφη εκτύπωση και WebSockets.

Εκτελέστε αυτήν την εντολή στο τερματικό του καταλόγου εργασίας σας για να εγκαταστήσετε το httpπροσδοκώ πακέτο.

πηγαίνω λάβετε το github.com/gavv/httpexpect

Ακολουθεί ένα απλό παράδειγμα δοκιμής μιας λειτουργίας χειριστή με το httpπροσδοκώ πακέτο.

πακέτο κύριος

εισαγωγή (
"fmt"
"github.com/gavv/httpexpect/v2"
"net/http"
"net/http/httptest"
"δοκιμή"
)

funcπαράδειγμα Χειριστής()http.Χειριστής {
ΕΠΙΣΤΡΟΦΗ http. HandlerFunc(func(συγγραφέας http. ResponseWriter, αίτημα *http. Αίτηση) {
fmt. Fprintln (συγγραφέας, "Hello World")
})
}

funcTestexample Handler(t *δοκιμή. Τ) {
// δημιουργία http. Χειριστής
χειριστής := exampleHandler()

// εκτέλεση διακομιστή χρησιμοποιώντας httptest
διακομιστής := httptest. NewServer (χειριστής)
αναβάλλω υπηρέτης. Κλείσε()

// δημιουργήστε το http αναμενόμενο παράδειγμα
αναμένω := httpexpect. Νέος (t, διακομιστής. URL)

// λειτουργεί;
αναμένω. ΠΑΙΡΝΩ("/").
Αναμένω().
Κατάσταση (http. StatusOK).JSON().Array().Empty()
}

ο παράδειγμα Χειριστής Η συνάρτηση χειριστή επιστρέφει έναν χειριστή HTTP για το httpπροσδοκώ πακέτο. ο Testexample Handler Η συνάρτηση δηλώνει μια παρουσία της συνάρτησης χειριστή. Στη συνέχεια δημιουργεί έναν νέο διακομιστή για τη δοκιμή του τελικού σημείου με το httptest πακέτο.

ο αναμένω μεταβλητή είναι δική σας httpπροσδοκώ περίπτωση που χτυπά το ΠΑΙΡΝΩ αίτημα ρίζας τελικού σημείου στον διακομιστή. ο Κατάσταση επιστρέφει η συνάρτηση τον κωδικό κατάστασης (σε αυτήν την περίπτωση, 200) εάν το τεστ επιτύχει.

Γράψτε αναλυτικά και διαισθητικά τεστ

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