Sto utilizzando male l'inizializzazione dell'istanza?

1

Scrivo spesso test quando ho bisogno di impostare l'oggetto dati per i test di integrazione che coinvolgono poche pagine con i moduli. Qui ogni modulo in una pagina può essere rappresentato da una classe di oggetto dati diversa. Ci sono momenti in cui il test finisce nel riempire gli stessi dati per una pagina specifica mentre lo si modifica per altre pagine e la convalida del flusso generale. Ho pensato invece di impostare l'oggetto dati ogni volta dal metodo di prova, posso sfruttare il blocco di inizializzazione dell'istanza per impostare i dati per i test. Qui ho elencato una versione più piccola di test che di solito scrivo -

Questa mia classe di dati che contiene dati per i valori del modulo - casella di testo, menu a discesa, ecc. Non ho mantenuto i setter per brevità -

public class DataClass {

private int i;
private int j;

public DataClass() {
    i=1;
    j=1;
}   

public int getI(){
    return i;
}

public int getJ(){
    return j;
}
}

Di seguito è riportata la classe helper che viene utilizzata dalla classe di test per compilare i dati del modulo nella pagina -

public class WorkerClass {

private DataClass data;

public void setData(DataClass data){
    this.data = data;       
}

public int add() {
    return data.getI()+data.getJ();
}

public int substract() {
    return data.getI()-data.getJ();
}
}

Ed ecco il metodo di prova. Si noti che invece di chiamare setData di WorkerClass in ogni metodo di test ho usato il blocco di inizializzazione dell'istanza -

public class TestClass {

private DataClass data = new DataClass();
WorkerClass workerClass = new WorkerClass();

{
    workerClass.setData(data);
}

@Test
public void testAddition() {
    assert workerClass.add()==0:"addition Failed";

}

@Test
public void testSubstraction() {
    assert workerClass.substract()==0:"substraction failed";        
}   
}

La mia domanda è, sto abusando del blocco di inizializzazione dell'istanza e dovrei invece chiamarlo da ogni metodo di test, anche se tutto il metodo di test richiede lo stesso insieme di dati?

    
posta Tarun 28.12.2011 - 08:12
fonte

2 risposte

2

Il problema che credo con l'inizializzazione per l'impostazione dei dati di test è che si incontreranno problemi quando un singolo test cambia lo stato dell'oggetto che si sta testando. Tutti gli altri test eseguiti dopo quel test specifico utilizzerebbero dati errati e potrebbero produrre un risultato falso successo / fallimento se il test assume uno stato o dati iniziali specifici.

Se ci sono attività comuni prima che ogni test venga eseguito e non vuoi continuare a scriverle per ogni test (che è appropriato), probabilmente dovrebbero essere inserite in una funzione setUp.

@Before public void setUp() {
    workerClass = new WorkerClass();
    workerClass.setData(data);
}

La funzione di impostazione viene chiamata automaticamente prima di ogni test, quindi non è necessario chiamarla esplicitamente.

Vedi link

    
risposta data 28.12.2011 - 16:19
fonte
2

Dimentica "dovrebbe" e pensa all'obiettivo: codice testato minimamente che soddisfa le esigenze dell'utente. Il codice più corto (testato) è il migliore. Se tutti i tuoi metodi di test richiedono gli stessi dati, non ha senso duplicarlo.

    
risposta data 28.12.2011 - 08:23
fonte

Leggi altre domande sui tag