2013-10-20 22 views
8

Voglio sapere perché ho bisogno di gestire l'eccezione, quando sto prendendo in giro un metodo di annullamento che genera un'eccezione.Mockito, metodo vuoto con eccezione controllata

Per esempio

public class MyObject { 
    public void call() throws SomeException { 
     //do something 
     } 
} 

Ora, quando sto facendo questo,

@Mock 
MyObject myObject; 

doNothing().when(myObject).call() 

il risultato e 'errore di compilazione dire

"error: unreported exception SomeException; must be caught or declared to be thrown"

Mi chiedo, perché ho bisogno di gestire un'eccezione per il metodo, che a sua volta viene deriso.

+2

Non è necessario gestirlo. Basta mettere "getta l'eccezione" sul tuo metodo di prova. Contrassegno tutti i miei metodi JUnit con 'getta l'eccezione 'come una questione di abitudine - non c'è motivo per non farlo. –

+0

@DawoodibnKareem Quando voglio segnalare che un test deve generare eccezioni, io uso gli helper dell'asserzione, come ad esempio '@Test (expected = ...)'. Cerco di evitare la clausola 'throws' nella firma del metodo di test in quanto non ha alcuna informazione utile sul test stesso. –

risposta

7

Quando si prende in giro un oggetto utilizzando Mockito in Java. Il framework non cambia nulla rispetto alle specifiche della lingua. E in Java, la clausola throws viene definita nella compilation. Non è possibile modificare le eccezioni dichiarate in fase di esecuzione. Nel tuo caso, se chiami il metodo MyObject.call(), devi gestire lo SomeException come in qualsiasi normale codice Java.

Poiché nel test di unità, non si desidera gestire le cose che non si stanno testando. Nel tuo caso, semplicemente ridichiarò throws SomeException nel metodo di prova.

Problemi correlati