Δοκιμές στη διαδρομή YAMLScript

Μάθε πώς να δοκιμάζεις τις ασκήσεις YAMLScript στο Exercism


Το να δοκιμάζεις λύσεις ασκήσεων του Exercism γραμμένες σε YAMLScript είναι εξαιρετικά εύκολο. Εύκολο στην εκτέλεση και εύκολο στην κατανόηση.

Απλώς τρέχεις make test στον κατάλογο της άσκησης.

Την πρώτη φορά που τρέχεις make test, όλα τα τεστ θα αποτύχουν, απλώς και μόνο επειδή δεν έχεις γράψει ακόμα κώδικα για να περάσεις τα τεστ.

Η συνηθισμένη διαδικασία ανάπτυξης μιας άσκησης είναι να ξεκινάς με make test και μετά να συγκεντρώνεσαι σε ένα τεστ τη φορά, γράφοντας κώδικα για να περάσει αυτό το τεστ. Όταν περάσουν όλα τα τεστ, τελείωσες!

Ως μπόνους, το να τρέχεις make test θα φροντίσει επίσης να εγκατασταθεί η σωστή έκδοση του διερμηνευτή YAMLScript ys (αυτή που απαιτεί η τρέχουσα άσκηση) στη σωστή θέση (στο /path/to/exercism/yamlscript/.local/). Αυτό σημαίνει ότι δεν χρειάζεται καν να εγκαταστήσεις το ys από πριν για να ξεκινήσεις!

Διάταξη του καταλόγου μιας άσκησης

Αν δουλεύεις σε μια άσκηση που ονομάζεται the-great-exercise, τότε η εντολή exercism download --exercise=the-great-exercise --track=yamlscript θα δημιουργήσει τον κατάλογο /path/to/exercism/yamlscript/the-great-exercise.

Μέσα σε αυτόν τον κατάλογο, το αρχείο τεστ θα ονομάζεται the-great-exercise-test.ys και το αρχείο του προγράμματος λύσης θα ονομάζεται the-great-exercise.ys. Θα υπάρχει επίσης ένα αρχείο README.md με την περιγραφή της άσκησης και ένα αρχείο HELP.md με κάποιες χρήσιμες πληροφορίες σε περίπτωση που κολλήσεις.

Θα υπάρχουν δύο αρχεία για το make: το Makefile και το GNUmakefile. Αυτό γίνεται για να σιγουρευτείς (χωρίς λογοπαίγνιο) ότι χρησιμοποιείς το GNU make για να τρέξεις τα τεστ και όχι κάποια άλλη εντολή make που μπορεί να είναι εγκατεστημένη στο σύστημά σου. Το GNUmakefile είναι το πραγματικό και το GNU make θα το προτιμήσει πάντα έναντι του Makefile. Οι άλλες εντολές make θα χρησιμοποιήσουν το Makefile, το οποίο θα πρέπει να εμφανίσει σφάλμα με ένα μήνυμα που θα σου λέει να χρησιμοποιήσεις το GNU make!

Ανατομία ενός αρχείου τεστ

Τα τεστ του YAMLScript είναι γραμμένα σε YAMLScript, φυσικά! Δεδομένου ότι το YAMLScript είναι YAML και το YAML είναι δεδομένα, τα τεστ είναι βασικά απλώς δεδομένα.

Ακολουθεί ένα παράδειγμα ενός απλού αρχείου τεστ. Στην πραγματικότητα, είναι τα πρώτα 3 τεστ από την άσκηση acronym. :-)

#!/usr/bin/env ys-0

use ys::taptest: :all
load: 'acronym.ys'

test::
- name: Basic
  code: abbreviate('Portable Network Graphics')
  want: PNG

- name: Lowercase words
  code: abbreviate('Ruby on Rails')
  want: ROR

- name: Punctuation
  code: abbreviate('First In, First Out')
  want: FIFO

done: 3

Η πρώτη γραμμή είναι μια γραμμή shebang που λέει στην εντολή prove (την οποία εκτελεί το Makefile) να χρησιμοποιήσει τον διερμηνευτή YAMLScript ys για να τρέξει τα τεστ αντί για την perl, που είναι η προεπιλογή για το prove.

Η δεύτερη γραμμή είναι μια εντολή use που φορτώνει τη βιβλιοθήκη δοκιμών TAP ys::taptest του YAMLScript.

Σημείωση: Το TAP είναι μια απλή διεπαφή βασισμένη σε κείμενο μεταξύ σεναρίων δοκιμών και εργαλείων εκτέλεσης δοκιμών, και το prove είναι το τυπικό εργαλείο εκτέλεσης για να τρέχεις τεστ TAP στη Perl. Επειδή η Perl είναι τόσο διαδεδομένη, η χρήση του TAP και του prove καταλήγει να είναι μια πολύ καλή επιλογή για σουίτες δοκιμών σε πολλές γλώσσες (ανάμεσά τους και η YAMLScript).

Η εντολή use φορτώνει το πρόγραμμα λύσης acronym.ys, ώστε να το δοκιμάζει αυτό το αρχείο τεστ.

Όλα τα τεστ μας βρίσκονται σε μια ακολουθία YAML κάτω από το κλειδί test.

Η τελευταία γραμμή done: είναι απαραίτητη και λέει στο εργαλείο εκτέλεσης δοκιμών ότι όλα τα τεστ όντως εκτελέστηκαν. Ο αριθμός (που είναι προαιρετικός) είναι ο αριθμός των τεστ που περιμέναμε να εκτελεστούν.

Κάθε τεστ (κάτω από το κλειδί test) είναι μια αντιστοίχιση με αυτά τα ζεύγη κλειδιού/τιμής:

  • name: - Η ετικέτα του τεστ, η οποία εκτυπώνεται από το prove -v.
  • code: - Ο κώδικας YAMLScript που θα εκτελεστεί. Αυτός ο κώδικας θα καλέσει κάποια συνάρτηση στο πρόγραμμα λύσης με το οποίο δουλεύουμε.
  • what: - Για τα τεστ που περιμένουν να προκύψει σφάλμα, η τιμή είναι error. Για τα κανονικά τεστ, το ζεύγος δεν υπάρχει.
  • want: - Το αναμενόμενο αποτέλεσμα του τεστ. Αυτή είναι μια τιμή YAML και μπορεί να είναι συμβολοσειρά, αριθμός, boolean (λογική τιμή), ακολουθία ή map. Αν το what: είναι error, τότε αυτή η τιμή είναι το αναμενόμενο μήνυμα σφάλματος.
  • SKIP: - Βάλε την τιμή true για να παραλείψεις την εκτέλεση αυτού του τεστ.
  • ONLY: - Βάλε την τιμή true για να τρέξεις μόνο αυτό το τεστ. Αν έχεις περισσότερα από ένα τεστ ONLY:, θα εκτελεστεί το καθένα από αυτά.

Αυτά θα πρέπει να είναι όλα όσα χρειάζεται να ξέρεις για να κάνεις test driven development σε YAMLScript για τις ασκήσεις του Exercism!

Η βιβλιοθήκη ys::taptest έχει κι άλλες δυνατότητες που μπορείς να χρησιμοποιήσεις για να γράψεις πιο σύνθετα τεστ, αλλά τα τεστ του Exercism έχουν ήδη γραφτεί για σένα. Για να μάθεις περισσότερα για τη βιβλιοθήκη ys::taptest, δες την τεκμηρίωση.