Scrittura dei test di Junit per rilevare le eccezioni?

1

Ho una funzione / metodo che genera qualche eccezione quando viene chiamato il database. Stavo scrivendo i test di Junit e mi è stato detto di avere una buona copertura. Quindi, dovrei scrivere il test Junit che cattura un'eccezione. Penso che non abbia alcun senso, dal momento che devo prendere in giro il database per farlo.

Quindi lo scenario intero sarà così:

public <returntype> method(<arguments>) {
    //statments
    try {
        // database call
        database.insert(<Argument>);
    }
    catch {
        logger.error();
        return error;
    }
}

Ha senso solo quando c'è qualcosa di buono nel prendere la dichiarazione. Ma se è il solo logging, allora non ha senso fare un test Junit per questo.

Quindi dovrei scrivere questo test?

public void test_catch_Exception() {
    //setup
    database = ..//

    when(database)
    .calls(insert)
    .return(Exception);

    try{
        //some statements for execution of the method
    }
    catch(Exception e) {

    }
    Assert.fail();
}
    
posta prakharjain 06.02.2018 - 08:00
fonte

1 risposta

2

Per il tuo particolare estratto di codice, non hai bisogno di un catch(Exception e) seguito da un Assert.fail . Se non viene rilevata un'eccezione, il test fallirà comunque. Dovresti assolutamente affermare che quando viene lanciata l'eccezione DB si finisce per ottenere "l'errore" dal tuo metodo (cioè, return error bit).

Il punto di test unitario è verificare gli effetti e gli effetti collaterali di un metodo. Se il tuo metodo registra un errore e il tuo team di gestione della produzione considera tale registro di importanza vitale , allora ha senso affermare che è stata effettuata una chiamata a logger.error (o qualsiasi altra cosa tu abbia usato) con gli argomenti giusti (ad esempio, l'eccezione che è stata generata da sé). Puoi farlo attraverso Mockito.verify . Per verificare il vero file di log sarà probabilmente un overkill.

    
risposta data 06.02.2018 - 08:34
fonte

Leggi altre domande sui tag