Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    JUnit come gestire l'eccezione su questo esercizio

    Buongiorno a tutti,
    ho fatto questo programmino di test ma non so come gestire l'eccezione in questo caso.

    import static org.junit.Assert.*;

    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;

    import junit.framework.Assert;

    import org.hibernate.Query;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.Transaction;
    import org.hibernate.cfg.Configuration;
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;

    import test.hibernate.Utente;


    public class TestCancellazioneUtente {

    private SessionFactory sessionFactory;
    private org.hibernate.classic.Session session;
    private Utente utente;

    @Before
    public void setUp() throws Exception {

    sessionFactory = new Configuration().configure().buildSessionFactory();
    session = sessionFactory.getCurrentSession();
    session.beginTransaction();
    Transaction tx = session.beginTransaction();
    // session.getTransaction().commit();
    }

    @After
    public void tearDown() throws Exception {

    session.close();
    if ( sessionFactory != null ) {
    sessionFactory.close();
    }
    }


    public void testnotworking() {

    session = sessionFactory.openSession();
    session.beginTransaction();
    utente = new Utente();
    //utente.setNome("Gio");


    Query result = session.createQuery( "delete from Utente where cognome='Rossi' and id=2 " );
    List l = result.list();


    for (int i = 0; i< l.size();i++) {
    Assert.assertEquals("Gio", l.get(i).toString());
    fail("non c'è.");
    }

    fail("non esiste.");

    }


    cosa devo mettere per gestire l'assert? non so se mi spiego ma non ho dormito molto e quindi al momento non capisco molto, se però sapete consigliarmi come far funzionare questo programma che deve cancellare un elemento nel database ve ne sarei grata. L'eccezione dovrebbe dire che l'elemento all'interno del db non esiste o che i dati non corrispondo.

    Grazie.

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Dopo tutto questo tempo ancora non usi i tag code per il codice?

    Detto questo, ti chiedo, la tua applicazione cosa fa quando non trova un dato? Devi scrivere l'assert in modo che in quelle condizioni ti torni quel determinato errore (che ti aspetti perché hai scritto tu il codice)
    RTFM Read That F*** Manual!!!

  3. #3
    Mi scuso per i tag code che mancano, ma ho proprio sbagliato a postare il codice, infatti ho postato una cosa per un'altra,praticamente ho preso un codice che dovevo invece cancellare mi scuso doppiamente per quest'errore ma ero così stanca che ho copiato una cosa per un'altra comunque domani mattina aprirò una nuova discussione con il codice giusto e con i tag code. mi scuso ancora e non lo posto ora perchè sono più stanca di ieri e finisce che copio qualche altra cosa.

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    posta il codice qui e scrivi bene la richiesta, non aprire 2 discussioni sullo stesso argomento.
    Inoltre non ho nemmeno capito che hai fatto
    RTFM Read That F*** Manual!!!

  5. #5
    Ciao Valia, so di essere un pò scimunita però è un periodo di brutte notizie.

    comunque il codice è questo


    public void testnotworking() {

    session = sessionFactory.openSession(); // apre la configurazione con il database
    session.beginTransaction();
    //utente = new Utente();


    Query result = session.createQuery( "select nome from Utente where id=6" ); // la query seleziona il nome della paersona dalla tabella Utente con id 6
    List l = result.list(); // restituisce il risultato della query che è una lista
    System.out.println(result);


    for (int i = 0; i< l.size();i++) { // scorre la lista


    Assert.assertEquals("Marino", l.get(i).toString());// ricava l'elemento dalla lista convertendolo in tipo stringa e lo confronta con un dato messo da me

    System.out.println(l.get(i).toString()); // stampa il dato di l.get(i).toString().

    }

    // nel caso il confronto vada a buon fine ci sarà la sbarra verde nel caso inverso
    //il risultato dovrebbe essere negativo.


    // Assert.fail("non c'è");
    }
    }


    Nel caso positivo funziona sicuro nel caso negativo mi compare la sbarra rossa ed esce scritto :

    junit.framework.ComparisonFailure: null expected:<[Marco]> but was:<[Lukas]>
    at TestProvaUtente.testnotworking(TestProvaUtente.jav a:115)

    ora vorrei sapere se c'è un modo per gestire questa cosa o se nel caso di fallimento funziona proprio così.
    Perchè mi è stato detto che quando devo far fallire un test deve comparire comunque la sbarra verde quindi adesso mi son bloccata avevo pensato di aggiungere un fail ma non sono certa che vada bene, anche perchè quando ho provato ad usarlo mi ha dato errore proprio sulla riga di codice.

    spero di essere stata chiara e attendo vostri aiuti-

  6. #6
    P.s. la riga 115 sarebbe l'Assert.assertEquals

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Originariamente inviato da Marisascar
    P.s. la riga 115 sarebbe l'Assert.assertEquals
    mazza ieri ho finito di dirtelo del tag code!!!!
    Devi imparare a capire ciò che fai, ti invito a comprendere qualcosa da come hai scritto.
    L'unica cosa che posso fare è cercare di interpretare il tuo test
    codice:
    public void testnotworking() {
    
         session = sessionFactory.openSession(); // apre la configurazione con il database
         session.beginTransaction();
         // qui controllerei se la sessione è partita o meno
    
    
         Query result = session.createQuery( "select nome from Utente where id=6" ); // la query seleziona il nome della paersona dalla tabella Utente con id 6
         // qui controllerei se query lo ha creato bene 
         assertNotNull(result);
         List listaResult = result.list(); // restituisce il risultato della query che è una lista
    fin qui ho solo controllato come faccio la query. A questo punto devi chiederti: cosa fa il mio programma se non trova un utente con quell'id?
    1. ritorna eccezione
    2. ritorna null
    3. ritorna lista vuota

    cmq tu sai cosa torna (spero) perché lo hai scritto tu o conosci l'API che usi, sai cosa ti aspetti. Devi controllare che il risultato sia quello atteso.
    In questo caso ad esempio se ti aspetti una lista vuota
    codice:
     // se id 6 non esiste (ho capito che vuoi testare questo, ma ho ancora qualche dubbio)
         assertNotNull(listaResult);     
         assertEquals(0, listaResult.size());
    spero di aver capito cosa vuoi, perché ti giuro sono andata ad intuito
    RTFM Read That F*** Manual!!!

  8. #8
    Mi scuso nuovamente per i tag code.

    Allora a grandi linee si hai capito quello che voglio fare in questa parte del codice voglio verificare se esiste un utente con quell' id nel caso non esistesse vorrei restituisse NULL

    codice:
    public void testnotworking() {       
    session = sessionFactory.openSession(); // apre la configurazione con il database      session.beginTransaction();      // qui controllerei se la sessione è partita o meno        
    
    //la sessione è aperta quindi è ok
    
    Query result = session.createQuery( "select nome from Utente where id=6" ); // la query seleziona il nome della persona dalla tabella Utente con id 6      
    // qui controllerei se query lo ha creato bene      
    
    // La query è ok 
    
     assertNotNull(result);      
    List listaResult = result.list(); // restituisce il risultato della query che è una lista


    nel caso trovasse l'utente vorrei che facesse :


    codice:
      for (int i = 0; i< l.size();i++) { // scorre la lista   
    Assert.assertEquals("Marino", l.get(i).toString());// ricava l'elemento dalla lista lo confronta con il dato inserito in questo caso "Marino"   }
    in questo caso se i dati confrontati non fossero uguali vorrei che ritornasse un'eccezione sempre se si può fare.

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    forse non ti è chiaro l'obiettivo del test: avere un meccanismo automatizzato che attesti che il tuo programma si comporta come tu dichiari.

    1. nel caso in cui l'utente sia presente, tu devi visualizzare intanto il nome e puoi fare una assertEquals con quello atteso
    2. se l'utente non è presente, assertEquals (null, risultatoOttenuto), anche se una lista vuota io la preferisco SEMPRE a null.

    Non è buono che un test termini con eccezioni, l'eccezione indica una anomalia in esecuzione, quindi terminare un test con eccezione è errato.
    Al massimo è il tuo metodo che termina con eccezione e tu controlli che l'eccezione che ti arriva è quella che hai previsto nel metodo.

    Se tu fai una query con un ID che non esiste, non devi tornare altro che un insieme vuoto. E' errato che il tuo metodo torni una lista.

    Poi sei sicura che non ci siano dati pendenti nelle strutture che usi? Setup e teardown fanno davvero pulizia?
    RTFM Read That F*** Manual!!!

  10. #10
    Ti ringrazio per avermi chiarito alcune cose che effettivamente non avevo capito sulle eccezioni.

    riguardo all'assertEquals non sapevo che potevano essere usati in questo modo proverò a metterli nel codice.

    Riguardo la query ho cercato su internet come si potevano inserire le query all'interno di una JUnit e portava questi 3 modi:

    1)String query = session.createQuery("select nome from Utente where id=5 ").toString();
    2)List<Utente> result = session.createQuery( "select nome from Utente where id=5" ).list();
    3)Query result = session.createQuery( "select nome from Utente where id=6 " );

    ed ho usato la terza perchè le altre due portavano errori nel codice, infatti mi sono bloccata per diverso tempo e alla fine ho aggirato un pò il problema

    riguardo setUp e tearDown funzionano bene lì non ci sono problemi.

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.