I test nel track Factor

Scopri come testare gli esercizi Factor su Exercism


Quando scarichi un esercizio, Exercism lo salva come cartella autonoma, per esempio ~/exercism/factor/hello-world. Quella cartella contiene una sottocartella con la soluzione e un'altra con il test runner:

hello-world/
├── hello-world/
│   ├── hello-world.factor        <- your solution
│   └── hello-world-tests.factor  <- the tests
└── exercism-tools/               <- the bundled test runner

Spostati con cd nella cartella principale ed esegui i test con:

factor -roots=. -run=exercism-tools <exercise>

Sostituisci <exercise> con il nome dell'esercizio (lo stesso nome della cartella). Per esempio, per testare hello-world:

cd ~/exercism/factor/hello-world
factor -roots=. -run=exercism-tools hello-world

Esegui il comando dalla cartella principale dell'esercizio, la directory che contiene sia la sottocartella <exercise> sia exercism-tools.

Sono gli stessi test che Exercism esegue quando invii la soluzione, quindi quando passano tutti in locale sei pronto per inviare.

Un test alla volta

Ogni esercizio parte con un solo test attivo, il primo. I test rimanenti sono bloccati da una riga STOP-HERE nel file <exercise>-tests.factor; il runner ignora tutto ciò che sta sotto.

"year not divisible by 4 in common year" description
{ f } [ 2015 leap-year? ] unit-test

STOP-HERE

"year divisible by 2, not divisible by 4 in common year" description
{ f } [ 1970 leap-year? ] unit-test

Fai passare il primo test, poi sposta STOP-HERE più in basso, oltre il test successivo (oppure eliminalo per abilitarli tutti), ed esegui di nuovo i test. Procedi così attraverso il file finché non passano tutti i test.

Quando invii la soluzione, il runner di Exercism ignora STOP-HERE ed esegue tutti i test, quindi assicurati che passino tutti prima di inviare.

Quando i test passano

Il runner stampa ogni test che ha eseguito ed esce senza aggiungere altro:

Unit Test: { { f } [ 2015 leap-year? ] }

Quando un test fallisce

Il runner mostra il test, poi il valore che si aspettava e quello prodotto dal codice:

Unit Test: { { f } [ 2015 leap-year? ] }
--> test failed!
###FAIL_BEGIN###
leap/leap-tests.factor: 5
=== Expected:
f
=== Got:
t
###FAIL_END###

Qui il test ha eseguito 2015 leap-year? e si aspettava f sullo stack, ma ha ottenuto t.

Leggere un test

I test si scrivono con unit-test, che prende un array che descrive come dovrebbe apparire lo stack dopo l'esecuzione di una quotation:

{ 3 } [ 1 2 + ] unit-test

Questo esegue [ 1 2 + ] e verifica che lasci 3 sullo stack. Un array vuoto, { }, significa che la quotation deve lasciare lo stack vuoto. La riga description opzionale sopra un test gli dà semplicemente un nome leggibile.

Per maggiori dettagli, consulta la documentazione di Factor sui test unitari.