Come testare sul track YAMLScript

Scopri come testare i tuoi esercizi YAMLScript su Exercism


Testare le soluzioni degli esercizi di Exercism scritte in YAMLScript è estremamente facile. Facili da eseguire e facili da capire.

Ti basta eseguire make test nella directory dell'esercizio.

La prima volta che esegui make test tutti i test falliranno, semplicemente perché non hai ancora scritto alcun codice per risolverli.

Il normale processo di sviluppo di un esercizio consiste nel partire da make test per poi concentrarti su un test alla volta, scrivendo il codice che lo faccia passare. Quando tutti i test passano, hai finito!

Come bonus, eseguire make test farà anche in modo che la versione corretta dell'interprete ys di YAMLScript (quella richiesta dall'esercizio attuale) sia installata nel posto giusto (in /path/to/exercism/yamlscript/.local/). Questo significa che non devi nemmeno installare ys in anticipo per iniziare!

Struttura di una directory di esercizio

Se stai lavorando a un esercizio chiamato the-great-exercise, allora exercism download --exercise=the-great-exercise --track=yamlscript creerà la directory /path/to/exercism/yamlscript/the-great-exercise.

All'interno di questa directory, il file di test si chiamerà the-great-exercise-test.ys e il file del programma della soluzione si chiamerà the-great-exercise.ys. Ci sarà anche un file README.md con la descrizione dell'esercizio e un file HELP.md con alcune informazioni utili in caso ti blocchi.

Ci saranno due file per make: Makefile e GNUmakefile. Questo serve a fare (npi) in modo che tu usi GNU make per eseguire i test e non qualche altro comando make che potrebbe essere installato sul tuo sistema. Il GNUmakefile è quello vero e GNU make lo preferirà sempre a Makefile. Gli altri comandi make useranno il Makefile, che dovrebbe dare un errore con un messaggio che ti dice di usare GNU make!

Anatomia di un file di test

I test di YAMLScript sono scritti in YAMLScript, ovviamente! Dato che YAMLScript è YAML e YAML è dati, i test sono praticamente solo dati.

Ecco un esempio di un semplice file di test. In realtà sono i primi 3 test dell'esercizio 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

La prima riga è una riga shebang che dice al comando prove (eseguito dal Makefile) di usare l'interprete ys di YAMLScript per eseguire i test invece di perl, che è il valore predefinito per prove.

La seconda riga è un'istruzione use che carica la libreria di test ys::taptest TAP di YAMLScript.

Nota: TAP è una semplice interfaccia testuale tra gli script di test e gli harness che li eseguono, e prove è l'harness standard per eseguire i test TAP in Perl. Dato che Perl è così diffuso, usare TAP e prove finisce per essere un'ottima scelta per le suite di test in molti linguaggi (YAMLScript incluso).

L'istruzione use carica il programma della soluzione acronym.ys, in modo che questo file di test abbia qualcosa da testare.

Tutti i nostri test sono in una sequenza YAML sotto la chiave test.

L'ultima riga done: è obbligatoria e comunica all'harness di test che tutti i test sono stati effettivamente eseguiti. Il numero (che è opzionale) è il numero di test che ci aspettavamo di eseguire.

Ogni test (sotto la chiave test) è una mappatura con queste coppie chiave/valore:

  • name: - L'etichetta del test, che viene stampata da prove -v.
  • code: - Il codice YAMLScript da eseguire. Questo codice chiamerà qualche funzione nel programma della soluzione su cui stiamo lavorando.
  • what: - Per i test che prevedono che si verifichi un errore, il valore è error. Per i test normali, la coppia non è presente.
  • want: - Il risultato atteso del test. È un valore YAML e può essere una stringa, un numero, un booleano, una sequenza o una mappa. Se what: è error, allora questo valore è il messaggio di errore atteso.
  • SKIP: - Impostalo su true per saltare l'esecuzione di quel test.
  • ONLY: - Impostalo su true per eseguire solo quel test. Se hai più di un test ONLY:, ognuno di essi verrà eseguito.

Questo dovrebbe essere tutto ciò che ti serve sapere per fare sviluppo guidato dai test in YAMLScript per gli esercizi di Exercism!

La libreria ys::taptest ha altre funzionalità che puoi usare per scrivere test più complessi, ma i test di Exercism sono già stati scritti per te. Per saperne di più sulla libreria ys::taptest, dai un'occhiata alla documentazione.