dicembre 2011 Blog Posts
In questo post illustrerò un modo per sviluppare un sito web che usa Sinatra usando la pratica del TDD. Per poter provare gli esempi occorre aver seguito
i passi del mio precedente post.
Sinatra, come altri framework scritti in Ruby, aderisce allo standard Rack. In sintesi basta realizzare un oggetto
che risponde al messagio call, prende un hash come parametro e risponde con un vettore di tre elementi: lo status code, l'header http e il body.
Un esempio di un oggetto che rispetta lo standard è:
class HelloWorld
def call(env)
...
Ho iniziato a studiare lo sviluppo di applicazioni web con Ruby. Volevo qualcosa di più leggero di Rails per riuscire a padroneggiarlo in meno tempo
così la scelta è ricaduta su Sinatra.
Di seguito i passi da fare per poter lavorare su Windows con una macchina virtuale Ubuntu:
Scaricare VirtualBox per windows da qui
Scaricare l'iso dell'installazione di Ubuntu da qui. Ho scaricato l'ultima versione 11.10 a 32 bit.
Da VirtualBox click su Nuova. Poi scegliere Linux e Ubuntu e dare un nome alla macchina virtuale (io ho scelto ubuntu-11.10)
Come memoria ho impostato 1024Mb. Per il resto ho lasciato le impostazioni di default.
Click su Avvia....
Una delle pratiche più invasive di extreme programming oltre al pair programming è il TDD (Test Driven Development) ed è anche la più difficile da padroneggiare.
In questo post cercherò di analizzare i motivi, fornendo alcuni spunti su come superare le difficoltà.
Le cose più difficili da accettare soprattutto se si ha già una certa esperienza è il fare emergenere il design dai test.
Questo implica di non anticipare eventuali feature successive o test successivi e scrivere il codice minimo indispensabile per fare passare il test appena scritto. Nella fase di refactoring poi si toglieranno tutti gli smell introdotti a partire dal più...
Un collega mi ha suggerito una tecnica interessante quando si è in presenza di codice legacy.
Nella nostra codebase abbiamo creato l'astrazione ICommitCommand per modificare i dati delle risorse esterne nei setup dei un test di accettazione in cui utilizziamo
i sistemi reali e non dei fake. Nel caso specifico la scrittura su un indice di Lucene e la modifica di alcuni dati nel db.
interface ICommitCommand
{
void Execute();
}
Inizialmente avevo creato l'oggetto:
class LuceneCommand : ICommitCommand
{
LuceneClient _client;
public LuceneCommand(LuceneClient client)
{
_client = client;
}
public void Execute()
{
...