Junit Test

di il
21 risposte

21 Risposte - Pagina 2

  • Re: Junit Test

    centurione_agrippa ha scritto:


    4)Successo quando il voto inserito è compreso tra 0 e 10;
    Detto così e vago e non vuol dire nulla. Non "perderti" in descrizioni così. Dovresti ragionare come ho ragionato io prima.

    centurione_agrippa ha scritto:


    Il test fallisce
    Beh, guarda i voti .... nella prima colonna chi ha il voto maggiore? (quel 9). E chi corrisponde a quell'indice nell'array dei nomi?


    P.S. Attenzione agli assert!! L'ordine degli argomenti è sempre prima il valore "aspettato" e poi quello "attuale". Non è solo un vezzo, serve a JUnit per rendere esplicativo il messaggio di errore!
  • Re: Junit Test

    Comunque io intenderei una cosa del tipo (prendi spunto):
    import static org.junit.Assert.assertArrayEquals;
    import org.junit.Test;
    
    public class RegistroTest {
        private static final String LUIGI = "Luigi";
        private static final String MARCO = "Marco";
        private static final String NICOLA = "Nicola";
        private static final String RENATO = "Renato";
    
        private final String[] nomi = { LUIGI, MARCO, NICOLA, RENATO };
        private final String[] materie = { "Inf", "Elettr", "Stor" };
    
        private final Registro reg = new Registro(nomi, null, materie);
    
        @Test
        public void testUnaPersonaMiglioreInTutteLeMaterie() {
            reg.setVoto(new double[][] {
                { 4, 5, 3.5 },
                { 8, 9, 8   },  // <-- vince
                { 5, 6, 7   },
                { 6, 3, 5   },
            });
    
            assertArrayEquals(new String[] { MARCO, MARCO, MARCO }, reg.migliori());
        }
    
    
        // fai altri test .....
    }
    testUnaPersonaMiglioreInTutteLeMaterie() ha successo, l'ho provato.
  • Re: Junit Test

    andbin ha scritto:


    Comunque io intenderei una cosa del tipo (prendi spunto):
    import static org.junit.Assert.assertArrayEquals;
    import org.junit.Test;
    
    public class RegistroTest {
        private static final String LUIGI = "Luigi";
        private static final String MARCO = "Marco";
        private static final String NICOLA = "Nicola";
        private static final String RENATO = "Renato";
    
        private final String[] nomi = { LUIGI, MARCO, NICOLA, RENATO };
        private final String[] materie = { "Inf", "Elettr", "Stor" };
    
        private final Registro reg = new Registro(nomi, null, materie);
    
        @Test
        public void testUnaPersonaMiglioreInTutteLeMaterie() {
            reg.setVoto(new double[][] {
                { 4, 5, 3.5 },
                { 8, 9, 8   },  // <-- vince
                { 5, 6, 7   },
                { 6, 3, 5   },
            });
    
            assertArrayEquals(new String[] { MARCO, MARCO, MARCO }, reg.migliori());
        }
    
    
        // fai altri test .....
    }
    testUnaPersonaMiglioreInTutteLeMaterie() ha successo, l'ho provato.
    La ringrazio infinitamente, lei mi è stato di grande aiuto. I miei casi di test non vanno bene ? Ci sono andato quasi vicino. Farò gli altri test
  • Re: Junit Test

    centurione_agrippa ha scritto:


    I miei casi di test non vanno bene ? Ci sono andato quasi vicino.
    I tre casi che ho detto prima li ho pensati ragionando più sulle combinazioni dei nomi in uscita in base ai voti.
    Non come hai detto tu es. "Successo quando sono stati inseriti tutti i voti per tutti gli alunni e per tutte le materie". Che detto così è vago e poco specifico.

    Poi certo, se intendi fare in modo che se un voto è negativo il metodo migliori() lanci fuori una eccezione, allora ok, e puoi anche testarlo come caso di dati non validi.
  • Re: Junit Test

    andbin ha scritto:


    centurione_agrippa ha scritto:


    I miei casi di test non vanno bene ? Ci sono andato quasi vicino.
    I tre casi che ho detto prima li ho pensati ragionando più sulle combinazioni dei nomi in uscita in base ai voti.
    Non come hai detto tu es. "Successo quando sono stati inseriti tutti i voti per tutti gli alunni e per tutte le materie". Che detto così è vago e poco specifico.

    Poi certo, se intendi fare in modo che se un voto è negativo il metodo migliori() lanci fuori una eccezione, allora ok, e puoi anche testarlo come caso di dati non validi.
    Sono riuscito a fare altri due casi d'uso in cui i test hanno successo. per caso d'uso di un voto negativo ho fatto in questo modo e funziona ma non ne sono tanto sicuro:
     @Test //voto inserito negativo.Fallisce
        public void testVotoNegativo(){ 
        	reg.setVoto(new double[][] {
                { 8, 5, 3.5 },	
                { 4, -9, 6.5 },  //fallisce
                { 5, 6, 7   },  
                { 6, 3, 5   },
            });
        	
        	assertArrayEquals(new String[] { LUIGI, MARCO, NICOLA }, reg.migliori());
        }
    mentre per il secondo caso d'uso da far fallire avevo pensato ad un voto inserito maggiore di 10 fatto cosi:
       @Test //voto inserito maggiore di 10. Fallisce 
        public void testVotoMaggiore(){  
        	double voto [][] ={{7,8,6.5},
    		   		  {4,5,  7 },
    		   		  {9,7,6   },
    		          {3,5,6   }};
        	for(int i=0; i<4;i++){
        		for(int j=0;j<4;j++){
        			assertFalse(voto[i][j]>10);
        		}
        	}
        }
    Il test con il numero negativo funziona mentre il test con il numero maggiore fallisce sempre
  • Re: Junit Test

    centurione_agrippa ha scritto:


     @Test //voto inserito negativo.Fallisce
        public void testVotoNegativo(){ 
        	reg.setVoto(new double[][] {
                { 8, 5, 3.5 },	
                { 4, -9, 6.5 },  //fallisce
                { 5, 6, 7   },  
                { 6, 3, 5   },
            });
        	
        	assertArrayEquals(new String[] { LUIGI, MARCO, NICOLA }, reg.migliori());
        }
    Se l'array dei nomi è come quello che ho fatto io, l'assert per avere "successo" deve essere:

    assertArrayEquals(new String[] { LUIGI, NICOLA, NICOLA }, reg.migliori());

    Il fatto del voto negativo non vuol dire nulla (se migliori() non è stato fatto per fallire con ECCEZIONE quando trova un voto negativo).
    A migliori() conta trovare il migliore per ciascuna materia. E nella seconda materia il voto più alto è il terzo dall'alto. Stop.
  • Re: Junit Test

    andbin ha scritto:


    centurione_agrippa ha scritto:




    Il fatto del voto negativo non vuol dire nulla (se migliori() non è stato fatto per fallire con ECCEZIONE quando trova un voto negativo).
    A migliori() conta trovare il migliore per ciascuna materia. E nella seconda materia il voto più alto è il terzo dall'alto. Stop.
    si infatti e quindi quella sul voto negativo la vedo un po inutile come cosa. Non mi vengo tre casi d'uso che potrebbero fallire, molto furbamente avevo pensato di fare l'opposto dei casi due che hanno successo, mi sembra un po inutile la cosa.
Devi accedere o registrarti per scrivere nel forum
21 risposte