Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    13

    Junit: più casi, struttura

    Ciao ragazzi, non mi è per niente chiaro il funzionamento di Junit e le guide in rete non aiutano...

    Io sono in questa situazione:

    1. creo un oggetto
    2. devo testare un metodo con parametri in ingresso diversi

    Ecco il codice esempio con Junit 3.
    Tralascio le dichiarazioni globali.

    codice:
    	protected void setUp() throws Exception {
    		super.setUp();
    		oggetto = new ClasseOggetto (myNumber);
    	}
    
    	protected void tearDown() throws Exception {
    		super.tearDown();
    		oggetto = null;
    	}
    
    	public void testMetodo() {
    		myNumber = 0;
    		String result1 = "ciao";
    		assertTrue("Il risultato aspettato non è corretto", (result1.compareTo(romanTest.convert(myNumber))==0));
    
    		myNumber = 1;
    		result1 = "I";
    		assertTrue("Il risultato aspettato non è corretto", (result1.compareTo(romanTest.convert(myNumber))==0));
    	}
    Sbaglio sicuramente la struttura, perchè se elimino il test con myNumber = 0 lasciando solamente quello con myNumber = 1, il risultato è positivo.

    Ho provato veramente tante soluzioni, creando nuove variabili, nuovi oggetti, ma il risultato è sempre deludente quando provo a concatenare più test su uno stesso oggetto.

    La struttura giusta del codice quale dovrebbe essere? Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    ogni test è indipendente, se tu devi testare il metodo

    codice:
    public String method(String param);
    con parametri

    pippo
    pluto

    farai questo

    codice:
    public void testPippo(){
        method("pippo"); 
        // blae
    }
    public void testPluto(){
        method("pluto"); 
        // blae
    }
    spero sia quello che cercavi
    RTFM Read That F*** Manual!!!

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    13
    Ciao e grazie del consiglio, ma purtroppo avevo provato anche questo e il risultato lo stesso.

    Sono riuscito a risolvere, il problema era la variabile contenuta nel java principale che non doveva essere globale, bensì mantenuta nel metodo che andavo a richiamare nei test.

    Grazie mille comunque

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Originariamente inviato da Smith2
    Ciao e grazie del consiglio, ma purtroppo avevo provato anche questo e il risultato lo stesso.

    Sono riuscito a risolvere, il problema era la variabile contenuta nel java principale che non doveva essere globale, bensì mantenuta nel metodo che andavo a richiamare nei test.

    Grazie mille comunque
    Prego, ma mi sa che ti confondi tu adesso. Che vuoi dire con "variabile che non deve essere globale ma mantenuta nel metodo che richiamo nel test"? non ti seguo
    RTFM Read That F*** Manual!!!

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    13
    Mi sono spiegato un po' alla cavolo.
    Entro nel dettaglio:

    il java principale converte un numero intero in un numero romano. Tale numero romano lo salvo in una stringa globale: roman

    Nel java del test, io vado a testare il test che converte.
    Allora il problema era questo:

    -effettuavo il primo test con, ad esempio, il numero 5: roman si "riempiva" con V
    -effettuavo il secondo test con il numero 1: roman si riempiva di V+I

    in sostanza roman non si azzerava, ma continuava a mantenere il valore ottenuto dal primo test, per poi andarsi a sommare al valore del secondo test.

    Siccome mi sono reso conto di questo problema, ho pensato di mettere roman come variabile locale del metodo di conversione, e così ho effettivamente risolto il problema.

    Ora che ti ho spiegato meglio il discorso, mi sorge un dubbio: ma se io avessi LA NECESSITA' di andare a testare una variabile globale nel java del programma, come dovrei fare se ho di questi problemi?

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    fai un po' di confusione sul concetto di test.
    Un test è indipendente dagli altri, significa che indipendentemente dall'ordine con cui esegui un test e indipendentemente dal fatto che li esegui tutti o una parte, l'esecuzione del test non DEVE variare. Se varia hia una dipendenze, segno di aver scritto male il codice.

    Il fatto che tu controlli che dato un intero hia un num romano puoi farlo così:

    codice:
    public void testConvertiCinque(){
      int i = 5; 
      String expected = "V"; 
      assertEquals(expected, converti(i)); 
    
    }
    L'altro test avrà tutto al suo interno. Ogni test in questo modo è totalmente indipendente dagli altri.
    Qualora hai delle variabili globali di test, puoi usare setup e teardown per inizializzarle/distruggerle.

    Infine ricorda sempre che una var globale è suscettibile a questo problema, usala se ne necessario....ma che vuole dire testare una variabile globale? Il test lo fai per controllare che un metodo si comporta come desideri, non per vedere una variabile globale
    RTFM Read That F*** Manual!!!

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    13
    Sì è praticamente quello che ti ho detto io, e ciò che il test2 non andava a buon fine per colpa della variabile globale roman. Mettendo questa all'interno del metodo il risultato è stato quello aspettato.

    Però ti chiedo: ma se fossi costretto a mettere una variabile globale e dovessi testarla, come potrei fare?

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    di nuovo, una variabile è un contenitore di valori, uno unit-test è un particolare programma che ti consente di verificare il comportamento di un metodo, che vuole dire testare una variabile? ti puoi chiedere se assume un certo valore, ma questo prescinde degli unit-test, non è il loro scopo e non è affatto utile visto che cmq x la variabile globale non è mai predicibile a priori il valore (nel senso che non è detto che assuma sistematicamente un valore indipendentemente dall'ordine di esecuzione)
    RTFM Read That F*** Manual!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.