Gestire eccezioni nei test

di il
5 risposte

Gestire eccezioni nei test

Ciao, fin'ora ho sempre creato classi di test con metodi che restituivano un boolean, piuttosto che un intero o una stringa...
Adesso devo gestire le classi di test su metodi che potrebbero lanciare un eccezione, esempio:
public boolean setOra(int ora) {
		if(ora>7 && ora<19) {
			this.ora = ora;
			return true;
		}
		else {
			throw new IllegalArgumentException();
		}
	}
In questo caso ho usato "assertTrue(setOra(15));" per testare l'inserimento di un orario corretto. Se però nel test passo come orario "21", il metodo giustamente mi genera un eccezione. A questo punto, al posto di assertTrue, cosa potrei usare per testare che effettivamente è stata lanciata un eccezione?

5 Risposte

  • Re: Gestire eccezioni nei test

    Giuso ha scritto:


    public boolean setOra(int ora) {
    Non serve boolean come ritorno di un setter, specialmente se lancia una eccezione come in quel modo.

    Giuso ha scritto:


    A questo punto, al posto di assertTrue, cosa potrei usare per testare che effettivamente è stata lanciata un eccezione?
    In JUnit 4:

    @Test(expected = IllegalArgumentException.class)

    In JUnit 5:

    si usa Assertions.assertThrows() passando il class della eccezione e specificando una lambda che esegue il codice che può lanciare quella eccezione.
  • Re: Gestire eccezioni nei test

    public void setOra(int ora) throws IllegalArgumentException{
          if(ora>7 && ora<19) 
             this.ora = ora;
          else 
             throw new IllegalArgumentException();
       }
    
    Devi aggiungere alla firma del metodo la clausola "throws", cioè dici al chiamante che questo metodo potrebbe generare delle eccezioni. Facendo in questo modo il chiamante dovrà utilizzare un blocco try e catch per poter utilizzare il tuo metodo.
  • Re: Gestire eccezioni nei test

    mark22 ha scritto:


    Devi aggiungere alla firma del metodo la clausola "throws"
    No, non è quello che serve. IllegalArgumentException è una eccezione "unchecked", non c'è alcun obbligo né di dichiararla, né di catturarla.
  • Re: Gestire eccezioni nei test

    Posso chiedervi un altro paio di domande che non c'entrano con il titolo o devo aprire un altra discussione?
  • Re: Gestire eccezioni nei test

    Giuso ha scritto:


    Posso chiedervi un altro paio di domande che non c'entrano con il titolo o devo aprire un altra discussione?
    Se riferito ad altro, meglio nuova discussione.
Devi accedere o registrarti per scrivere nel forum
5 risposte