2013-10-20 4 views
8

Ich möchte wissen, warum ich Ausnahme behandeln muss, wenn ich eine void-Methode verspottete, die Ausnahme auslöst.Mockito, Void-Methode mit geprüfter Ausnahme

Zum Beispiel

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

Jetzt, wenn ich dies tue,

@Mock 
MyObject myObject; 

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

führt dies zu Kompilierungsfehler sagen

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

Ich frage mich, warum ich Ausnahme behandeln müssen für die Methode, die selbst verspottet wird.

+2

Sie müssen nicht damit umgehen. Setzen Sie einfach 'throws Exception' in Ihre Testmethode. Ich markiere alle meine JUnit-Methoden mit "throws Exception" aus Gewohnheit - es gibt keinen Grund, dies nicht zu tun. –

+0

@DawoodibnKareem Wenn ich signalisieren will, dass ein Test Ausnahmen auslösen soll, verwende ich Assertion-Helfer, wie zum Beispiel '@Test (expected = ...)'. Ich versuche, die "throws" -Klausel in der Testverfahrensignatur zu vermeiden, da sie keine nützlichen Informationen über den Test selbst enthielt. –

Antwort

7

Wenn Sie ein Objekt Mockito in Java verspotten. Das Framework ändert nichts an der Sprachspezifikation. Und in Java ist die throws-Klausel bei der Kompilierung definiert. Sie können die deklarierten Ausnahmen zur Laufzeit nicht ändern. In Ihrem Fall, wenn Sie die Methode MyObject.call() aufrufen, müssen Sie die SomeException wie in einem normalen Java-Code behandeln.

Da im Komponententest Sie nicht mit Dingen umgehen möchten, die Sie nicht testen. In Ihrem Fall würde ich einfach throws SomeException in der Testmethode redeclare.