Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19

Discussione: [java] test di unità

  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    124

    [java] test di unità

    Buongiorno a tutti,
    devo fare i test di unità su di una classe (sono alla prima esperienza su queste cose).
    mi ritrovo davanti a questo metodo e non so come procedere, io utilizzo junit.


    codice:
    public Process getProcess(int id)
        {
            try
            {
                //Dati della tabella process
                String selQuery="SELECT * FROM process where id=?";
                ParameterizedRowMapper<Process> mapper = new ParameterizedRowMapper<Process>()
                {
                    public Process mapRow(ResultSet rs, int rowNum) throws SQLException
                    {
                        Process process=new Process();
                        process.setName(rs.getString("name"));
                        return process;
                    }
                };
            Process process=jdbcTemplate.queryForObject(selQuery, mapper, new Object[] {id});
            return process;
            }
            catch(Exception ex)
            {
                return null;
            }
            finally{}
        }

    più che altro non riesco a capire come gestire le eccezioni con i test.
    Ultima modifica di LeleFT; 09-09-2014 a 10:38 Motivo: Aggiunti i tag CODE

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da seredavide Visualizza il messaggio
    devo fare i test di unità su di una classe (sono alla prima esperienza su queste cose).
    mi ritrovo davanti a questo metodo e non so come procedere, io utilizzo junit.
    Il test su codice che accede a database al livello più "basso" possibile (per la API che si usa ovviamente, nel tuo caso i template JDBC di Spring) è più difficile, perché appunto dipende da dati ovvero dalla presenza (reale o fittizia) di dati in un database.

    Le cose sono due: o si prepara (a mano o con librerie specifiche come DbUnit) una base dati ben stabile, fissa e nota su un database "reale" per i test, oppure si deve "mockare" qualcosa e in tal caso solo JUnit non basta, serve anche Mockito o altra libreria di mock.

    Due risorse trovate al volo (valutale tu):
    http://stackoverflow.com/questions/2...e-unit-testing
    http://stackoverflow.com/questions/5...es-spring-jdbc
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Ti consiglio librerie come Mockito o EasyMock e ti crei un mock jdbcTemplate.

    Se poi ti servono dei mock più spinti (metodi static, costruttori ecc) prova PowerMock.
    Ultima modifica di Alex'87; 09-09-2014 a 10:05
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    124
    Grazie,
    ho iniziato ad utilizzare mockito ma ho già i piccoli problemi di base, datemi qualche consiglio sulla tipologia di errori:
    codice:
    @Before
        public void setup() {
            Process pprova= mock(Process.class);
            ProcessDao mproc= mock(ProcessDao.class);
        }
    
    
        @Test
        public void testGetProcess() {
            stub(mproc.getProcess(1)).doReturn(pprova);
            
            Process result=mproc.getProcess(1);
            
            assertSame("test ok", result,pprova);
            verify (mproc);
        }

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da seredavide Visualizza il messaggio
    codice:
            stub(mproc.getProcess(1)).doReturn(pprova);
            
            Process result=mproc.getProcess(1);
    Mockito purtroppo l'ho usato relativamente poco fino ad ora, quindi dovrei andarmi a rileggere alcune cose. Ma una cosa te la posso dire subito, perché riguarda il concetto. Quello stai cercando di fare con il codice sopra non è per niente utile. Cioè dire: "senti Mockito, quando viene chiamato il getProcess con valore 1, fagli restituire l'oggetto pprova". E poi invochi getProcess con 1.
    Perché così stai solo testando che Mockito "funziona" ..... non il tuo codice in getProcess !
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    124
    E quindi a livello concettuale quale dovrebbe essere il test?
    e poi come mai il frammento di codice sopra da errore sulla riga dello stub?

  7. #7
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Nel tuo caso mi verrebbe da mockare il ResultSet in modo che quando viene invocato rs.getString("name") ti dia un nome come se il db fosse stato davvero interrogato.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    124
    Grazie a tutti. e secondo voi come mai il frammento di codice sopra non compila, ma Junit da errore sulla riga dello stub?

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Quote Originariamente inviata da seredavide Visualizza il messaggio
    secondo voi come mai il frammento di codice sopra non compila, ma Junit da errore sulla riga dello stub?

    Hai fatto lo static import dei metodi (statici) della classe org.mockito.Mockito ?

    E' la prima riga del primo esempio della documentazione.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    124
    Certo, fatta. ho seguito la documentazione

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.