Suite di test in Ruby
Scritto da Michele Della Torre il 14 aprile 2008 – 21:12Una della basi per poter effettuare il refactoring in modo sicuro e tranquillo è l’avere a disposizione un insieme di test sufficientemente grande da lanciare molto spesso per verificare che il lavoro svolto non abbia introdotto errori.
Utilizzando Java ed Eclipse è molto semplice lanciare tutti i test di un progetto, basta cliccare con il pulsante destro sul progetto e selezionare “run as… JUnit test”, ma con Netbeans e Ruby non è così immediato: è infatti necessario creare una suite di test, cioè un insieme di test cases che quando lanciato esegue tutti i test contenuti.
In Java questo è un tipico caso di Composite, mentre in Ruby è possibile sfruttare la sua capacità di eseguire altri file in modo molto semplice a runtime grazie alla funzione require.
Il modo più semplice di procedere è usare una qualche convenzione per il nome dei singoli file di test, io, ad esempio, chiamo foo_test.rb il file che contiene i test della classe foo.rb.
Ora, ricordandosi che la require non è una direttiva del compilatore, ma una vera e propria funzione, è possibile richiamarla all’interno di un semplice ciclo che scorre tutti i file della directory il cui nome matcha il pattern *_test.rb:
Dir.glob("../test/*_test.rb").each do |file| require file end
Notare che la glob ritorna un insieme di stringhe e non di file, quindi è possibile passare direttamente ogni elemento alla require senza altre forme di processamento.
Lascio a voi per esercizio l’implementazione dello script che esegue anche i test delle sottocartelle :p