qc

Screenshot Λογισμικό:
qc
Στοιχεία Λογισμικού:
Εκδοχή: 0.1
Ανεβάστε ημερομηνία: 14 Apr 15
Προγραμματιστής: Peter Scott
Άδεια: Δωρεάν
Δημοτικότητα: 23

Rating: 4.0/5 (Total Votes: 2)

QC είναι ένα εργαλείο ελέγχου που σας επιτρέπει να γράφετε τις ιδιότητες που θα περιμένουμε να κατέχει αλήθεια, και αφήστε τον υπολογιστή να δημιουργήσει τυχαία περιπτώσεις ελέγχου για να βεβαιωθείτε ότι αυτές οι ιδιότητες διαθέτουν πραγματικά & nbsp?. Για παράδειγμα, αν έχετε γράψει τη συμπίεση και αποσυμπίεση λειτουργίες κάποιο πρόγραμμα συμπίεσης δεδομένων, μια προφανής ακίνητο σε δοκιμή είναι ότι η συμπίεση και αποσυμπίεση ένα string δίνει πίσω την αρχική κορδόνι. Εδώ είναι το πώς θα μπορούσε να εκφράσει ότι:
unittest εισαγωγής
qc εισαγωγής
κατηγορία TestCompression (unittest.TestCase):
& Nbsp? @ Qc.property
& Nbsp? Def test_compress_decompress (αυτο):
& Nbsp? "" ". Δοκιμή ότι η συμπίεση και αποσυμπίεση επιστρέφει τα αρχικά δεδομένα" ""
& Nbsp? Δεδομένων = qc.str () # Μια αυθαίρετη φράση. Οι τιμές τυχαία.
& Nbsp? Self.assertEqual (δεδομένα, αποσυμπίεση (συμπιέσει (δεδομένα)), τοξική για την αναπαραγωγή (δεδομένα))
Αυτό είναι ένα συνηθισμένο τεστ με ενσωματωμένο unittest πλαίσιο της Python (η οποία είναι ο λόγος που υπάρχει τόσο πολύ στερεότυπο). Εναλλακτικά, θα μπορούσατε να κάνετε ακριβώς το ίδιο πράγμα με διαφορετικό πλαίσιο δοκιμών, όπως το ελάχιστο φλύαρη, αρκετά ευχάριστη μύτη. Ο διακοσμητής @ qc.property τρέχει το διακοσμημένο λειτουργία αρκετές φορές, και κάθε φορά που οι τιμές επέστρεψαν από λειτουργίες όπως qc.string () είναι διαφορετικές. Με άλλα λόγια, QuickCheck είναι συμβατό με σχεδόν κάθε πλαίσιο δοκιμής μονάδα εκεί έξω? Δεν είναι ιδιαίτερα απαιτητική.
Λειτουργίες όπως qc.str (), qc.int (), και ούτω καθεξής, δημιουργούν αυθαίρετες τιμές ενός ορισμένου τύπου. Στο παραπάνω παράδειγμα, είμαστε υποστηρίζοντας ότι η ιδιότητα ισχύει για όλες τις χορδές. Όταν εκτελείτε τις δοκιμές, QuickCheck θα δημιουργήσει τυχαία χορδές για τη δοκιμή.
Θα παρατηρήσετε ότι είπα "τυχαία", όχι "τυχαία". Αυτό είναι εκ προθέσεως. Η κατανομή των τιμών είναι βελτιστοποιημένη για να συμπεριλάβει ενδιαφέροντα αξίες, όπως τις κενές συμβολοσειρές, ή χορδές με NUL χαρακτήρες στη μέση, ή χορδές που περιέχουν αγγλικό κείμενο. Σε γενικές γραμμές, QuickCheck προσπαθεί να δώσει ένα καλό μίγμα των έξυπνων δύσκολο αξίες και την τυχαιότητα. Αυτό είναι ουσιαστικά αυτό που θα κάνατε, αν έπρεπε να γράψω πραγματικά διεξοδική περιπτώσεις δοκιμή με το χέρι, εκτός από το ότι δεν πρέπει να το κάνουμε. Στην πράξη, ο υπολογιστής έχει λιγότερες προκαταλήψεις σχετικά με το τι συνιστά λογικό δεδομένα, γι 'αυτό θα βρείτε συχνά σφάλματα που ποτέ δεν θα είχε συμβεί σε σας να γράψετε περιπτώσεις δοκιμών για. Δεν ξέρω πώς να αποφεύγουν ασυνείδητα τα σφάλματα.
Δεν είστε περιορίζεται στις ενσωματωμένες λειτουργίες αυθαίρετη τιμή. Μπορείτε να τα χρησιμοποιήσετε ως δομικά στοιχεία για να δημιουργήσετε το δικό σας. Για παράδειγμα:
κλάση Point (αντικείμενο):
& Nbsp? Def __init __ (self, x, y):
& Nbsp? Self.x, self.y = float (x), float (y)
σημείο def ():
& Nbsp? "" "Πάρτε ένα αυθαίρετο σημείο." ""
& Nbsp? X = qc.int (-20, 20)
& Nbsp? Y = qc.int (-34, 50)
& Nbsp? Σημείο επιστροφής (x, y)
Στη συνέχεια μπορείτε να χρησιμοποιήσετε αυτό για να δημιουργήσετε αυθαίρετες τιμές σημείο σε ακίνητα. Εδώ είναι μια δοκιμή μύτη στυλ:
@ Qc.property
def test_triangle_inequality ():
& Nbsp? Pt = σημείο ()
& Nbsp? Διεκδικήσει κοιλιακούς (pt.x) + ABS (pt.y)> = Math.sqrt (pt.x ** 2 + pt.y ** 2), (pt.x, pt.y)
Όταν εκτελείτε αυτό, κάτι μαγικό συμβαίνει: QuickCheck θα προσπαθήσει να δημιουργήσει δύσκολο τιμές τόσο για το x και y μεταβλητές στην κατηγορία Point, μαζί, έτσι θα δείτε σημεία, όπως (0, 0), (1, 1), ( 0, 1), (385904, 0), καθώς επίσης και εντελώς τυχαία αυτές όπως (584, -35809648). Με άλλα λόγια, όχι μόνο την κατάρτιση τιμές x και y από ένα ρεύμα των τυχαίων αριθμών με ορισμένες δύσκολες τιμές σε αυτό, QuickCheck θα προσπαθήσει πραγματικά να δημιουργήσει δύσκολο συνδυασμούς των συντεταγμένων x και y.
Λειτουργίες για να πάρει αυθαίρετα στοιχεία
- Int (χαμηλή, υψηλή) δίνει πόντους, κάτι μεταξύ της προαιρετικής όρια χαμηλών και υψηλών.
- Μακρά (χαμηλή, υψηλή) δίνει λαχταρά, μεταξύ των προαιρετικών όρια χαμηλών και υψηλών.
- Πλωτήρα (χαμηλή, υψηλή) δίνει πλωτήρες, μεταξύ των προαιρετικών όρια χαμηλών και υψηλών. Δεν αξίες Infinities ή NaN.
& Nbsp? Str (μήκος = Καμία, MAXLEN = Κανένα) δίνει χορδές, του τύπου str. Η κωδικοποίηση είναι UTF-8. Αν το μήκος του είναι δεδομένη, οι χορδές θα είναι ακριβώς τόσο πολύ. Αν MAXLEN είναι δεδομένη, το μήκος συμβολοσειράς θα είναι σε πιο MAXLEN χαρακτήρες.
- Unicode (μήκος = Καμία, MAXLEN = Κανένα) δίνει χορδές Unicode, του τύπου Unicode. Αν το μήκος του είναι δεδομένη, οι χορδές θα είναι ακριβώς τόσο πολύ. Αν MAXLEN είναι δεδομένη, το μήκος συμβολοσειράς θα είναι σε πιο MAXLEN χαρακτήρες.
- Όνομα () δίνει τα ονόματα, σε Unicode. Αυτές κυμαίνονται από την πεζή, όπως το "John Smith", στους εξωτικούς - ονόματα που περιέχουν μη-σπάζοντας χώρων, ή τις διευθύνσεις ηλεκτρονικού ταχυδρομείου, ή Unicode χαρακτήρες εκτός βασικό πολύγλωσσο αεροπλάνο. Αυτό είναι, αν μη τι άλλο, λιγότερο διεστραμμένο από τα ονόματα που θα δείτε σε ένα αρκετά μεγάλο σύνολο των δεδομένων στο Διαδίκτυο.
- NameUtf8 () είναι το ίδιο με το όνομα () κωδικοποιούν ('UTF8 »)..
- FromList (στοιχεία) επιστρέφει τυχαία στοιχεία από μια λίστα. Αυτό είναι ιδιαίτερα χρήσιμο για τη δημιουργία του δικού αυθαίρετες λειτουργίες γεννήτρια δεδομένων σας.
- Randstr (μήκος = Καμία, MAXLEN = sys.maxint) δίνει χορδές τυχαία bytes. Αν το μήκος του είναι δεδομένη, οι χορδές θα είναι ακριβώς τόσο πολύ. Αν MAXLEN είναι δεδομένη, το μήκος συμβολοσειράς θα είναι σε πιο MAXLEN bytes.
Οι χορδές που δημιουργήθηκαν από την οδό και unicode τυχαία, αλλά κάποια προσπάθεια έχει τεθεί σε καθιστώντας τα αρκετά διεστραμμένο να αποκαλύψει σφάλματα σε ένα σωρό επεξεργασία του κώδικα εγχόρδων. Η λίστα με τα ονόματα βασίζεται χαλαρά φρικτό αναμνήσεις του να δει τον κωδικό επεξεργασίας όνομα συντριβή real-world δεδομένα, ξανά και ξανά και ξανά, όπως έγινε όλο και πιο σαφές ότι ο κόσμος είναι τρελός, και είμαστε πραγματικά καταδικασμένη. (Αυτό το συναίσθημα περνάει μόλις πάρετε αρκετή κάλυψη των δοκιμών και τα πράγματα τελικά σταματήσει να συντρίβεται. Υπάρχει ελπίδα!)
Το όνομα και το παράδειγμα σειρά δεδομένων σε qc.arbitrary μπορεί να είναι ενδιαφέρουσα ως πηγή των περισσότερων deteministic περίπτωση που τα δεδομένα δοκιμής. Μη διστάσετε να δανειστεί τίποτα. Τα εσωτερικά είναι μαγεία, αλλά από τις μαγικές εσωτερικά εξαρτήματα, τα πιο ενδιαφέροντα είναι σε qc.arbitrary και QC

Απαιτήσεις :.

  • Python

Παρόμοια λογισμικά

nose-coolstorybro
nose-coolstorybro

11 May 15

python-noseenv
python-noseenv

20 Feb 15

pytest-marks
pytest-marks

15 Apr 15

Σχόλια για qc

Τα σχόλια δεν βρέθηκε
προσθήκη σχολίου
Ενεργοποιήστε τις εικόνες!
Αναζήτηση ανά κατηγορία