www.fabiobeta.it

« httpunit: JSP Testing
HtmlPreviewer »

Ciao, sono Fabio.
Su queste pagine potete trovare esperienze, idee ed esperimenti di un programmatore in cerca di metodi per lavorare meglio e meno.

RSS

Questi sono i post più apprezzati del sito, dateci un'occhiata:

SFTP automatico e natalizio con ANT

La mia cassetta degli attrezzi: Il portatile

III: Tu non commenterai invano

YAGNI for Managers

Stand Up Meeting: Definizione

Eclipse: Propaganda a suon di keystroke

HtmlPreviewer

Gli altri sono qui.

Esperimenti con Vise (by Feathers)
20 Giugno 2006

Michael Feathers in questo articolo propone il concetto di Vise ("morsa"), con l'aggiunta di una libreria di supporto. Supponendo di dover modificare un bel metodo legacy senza capire bene come funzioni, mettere un Vise vuol dire "pinzare" il valore di variabili significative nel flusso di esecuzione, per controllare che la loro elaborazione non venga cambiata dall'intervento.

Il Vise.jar che Feathers fornisce è semplice ma ben pensato: inserendo la "morsa" nel codice e attivandola nei setUp dei TestCase, alla prima esecuzione dei test si registrano i valori, mentre alle successive si verifica che non vengano cambiati. Di fatto non ci si pone neanche il problema di capire "quanto" debba valere una variabile in un certo punto del codice. Ecco il solito esempio banale:

Nella classe Multiplier mettiamo una pinza al risultato calcolato con il comando Vise.grip(...)

package it.fabiobeta;
 
import vise.Vise;

public class Multiplier {

	int multiply(int a, int b) {
		int result = a * b;
		Vise.grip(result);
		return result;
	}

}

E possiamo così scrivere il testCase:

package it.fabiobeta;
 
import vise.Vise;
import junit.framework.TestCase;

public class MultiplierViseTest extends TestCase {
	
	
	protected void setUp() throws Exception {
		//scommentare per registrare da capo i test
                //Vise.release();
		Vise.openSection(getClass().getName() + "." + getName());
	}
	
	protected void tearDown() throws Exception {
		Vise.closeSection();
	}
	public void testMultiply() throws Exception {
		Multiplier mult=new Multiplier();
		mult.multiply(2, 2);
	}
	
	public void testMultiply2() throws Exception {
		Multiplier mult=new Multiplier();
		mult.multiply(4, 2);
	}
	
	public void testMultiply3() throws Exception {
		Multiplier mult=new Multiplier();
		mult.multiply(1, 1);
	}

}

Supponendo di non sapere fare 2x2, se dopo una prima esecuzione cambiassimo la formula di moltiplicazione in 2+2 avremmo Vise che ci annuncia l'eccezione.

P.S. Per chi non lo sapesse Feathers è l'autore di questo libercolo. Se siete curiosi questo è l'articolo da cui è poi nato il libro

send a feedback to fabio

« httpunit: JSP Testing
HtmlPreviewer »

Fight Spam! Click Here!