Μάθε πώς η διαδρομή Clojure χρησιμοποιεί γεννήτριες δοκιμών για να δημιουργεί δοκιμές για τις ασκήσεις
Το track Clojure χρησιμοποιεί μια γεννήτρια test για να παράγει αυτόματα τα test των ασκήσεων εξάσκησης.
Εκμεταλλεύεται το γεγονός ότι οι περισσότερες ασκήσεις που ορίζονται στο αποθετήριο problem-specifications έχουν επίσης ένα αρχείο canonical-data.json, το οποίο περιέχει τυποποιημένα δεδομένα εισόδου και εξόδου για test που μπορούν να χρησιμοποιηθούν για την υλοποίηση της άσκησης.
Για να παράγει τα test μιας άσκησης εξάσκησης, η γεννήτρια test:
canonical-data.json τηςtests.toml για να παραλείψει τα αποκλεισμένα test casescanonical-data.json
Η γεννήτρια test αναλύει τα test cases από το αρχείο canonical-data.json της άσκησης χρησιμοποιώντας τη βιβλιοθήκη clojure/data.json.
Επειδή κάποια canonical data χρησιμοποιούν εμφώλευση, το test case που αναλύεται περιλαμβάνει ένα επιπλέον πεδίο path, το οποίο περιέχει τις ιδιότητες description τυχόν γονικών στοιχείων, καθώς και την ίδια την ιδιότητα description του test case.
Σημείωση: τα κλειδιά αναλύονται ως keywords.
tests.toml
Κάθε άσκηση έχει ένα αρχείο tests.toml, στο οποίο μεμονωμένα test μπορούν να αποκλειστούν/απενεργοποιηθούν.
Η γεννήτρια test θα αφαιρέσει όποια test cases είναι σημασμένα ως αποκλεισμένα (include = false).
Κάποιες ασκήσεις μπορεί να χρειάζονται μικροπροσαρμογές πριν από την απόδοση των δεδομένων. Για παράδειγμα, μπορεί να θέλεις να κάνεις την περιγραφή λιγότερο αναλυτική.
Για να προσαρμόσεις τα test cases, όρισε ένα αρχείο .meta/generator.clj με namespace <slug>-generator.
Υπάρχουν δύο τρόποι με τους οποίους μπορείς να μετασχηματίσεις τα test cases:
Για να ενημερώσεις μεμονωμένα test cases, όρισε την παρακάτω συνάρτηση:
(defn update-test-case
"Update a test case"
[test-case]
;; function body
)
Αυτό το παράδειγμα αφαιρεί όλα εκτός από το τελευταίο στοιχείο της τιμής :path (συντομεύοντας την περιγραφή):
(ns difference-of-squares-generator)
(defn update-test-case [test-case]
(update test-case :path #(take-last 1 %)))
Για να προσθέσεις ή να αφαιρέσεις test cases, όρισε την παρακάτω συνάρτηση:
(defn add-remove-test-cases
"Add/remove test case(s)"
[test-cases]
;; function body
)
Αν ορίσεις και τις δύο συναρτήσεις, καλείται πρώτα η add-remove-test-cases και μετά η update-test-case.
Τα (ενδεχομένως μετασχηματισμένα) test cases περνούν στη συνέχεια στο αρχείο .meta/generator.tpl, το οποίο καθορίζει πώς πρέπει να αποδοθούν τα test με βάση αυτά τα test cases.
Το αποδοθέν πρότυπο μορφοποιείται στη συνέχεια με το cljfmt. Αυτό έχει τα εξής πλεονεκτήματα:
Τέλος, η έξοδος του αποδοθέντος προτύπου γράφεται στο αρχείο test της άσκησης.
Τα πρότυπα αποδίδονται χρησιμοποιώντας τη βιβλιοθήκη hbs, η οποία υποστηρίζει σύνταξη handlebars (μέσω της handlebars.java).
Υπάρχουν δύο τρόποι με τους οποίους μπορεί να εκτελεστεί η γεννήτρια test:
bin/generate-tests: παράγει τα test για όλες τις ασκήσεις που διαθέτουν πρότυπο γεννήτριαςbin/generate-tests <slug>: παράγει τα test για τη συγκεκριμένη άσκηση, αν διαθέτει πρότυπο γεννήτριας