Ich versuche, eines meiner verspotteten Objekte eine markierte Ausnahme auslösen zu lassen, wenn eine bestimmte Methode aufgerufen wird. Ich versuche Folgendes.
@Test(expectedExceptions = SomeException.class)
public void throwCheckedException() {
List<String> list = mock(List.class);
when(list.get(0)).thenThrow(new SomeException());
String test = list.get(0);
}
public class SomeException extends Exception {
}
Dies führt jedoch zu folgendem Fehler.
org.testng.TestException:
Expected exception com.testing.MockitoCheckedExceptions$SomeException but got org.mockito.exceptions.base.MockitoException:
Checked exception is invalid for this method!
Invalid: com.testing.MockitoCheckedExceptions$SomeException
Wenn man sich die Mockito-Dokumentation ansieht , die sie nur verwenden RuntimeException
, ist es nicht möglich, mit Mockito geprüfte Ausnahmen von einem Scheinobjekt zu werfen?
Throws
Anmerkungen versehen, damit der Compiler denselben Bytecode generiert wie beim Deklarieren von Würfen im entsprechenden Java-Code. Weitere Informationen finden Sie unter [hier] ( kotlinlang.org/api/latest/jvm/stdlib/kotlin.jvm/-throws/… ).Eine Problemumgehung besteht darin, eine
willAnswer()
Methode zu verwenden.Zum Beispiel funktioniert das Folgende (und
MockitoException
wirft kein, sondern wirft tatsächlich ein Häkchen,Exception
wie hier erforderlich) mitBDDMockito
:Das Äquivalent für Mockito würde die
doAnswer
Methode verwendenquelle
willAnswer( invocation -> { throw new Exception("abc msg"); }).given(someObj).someMethod(stringArg1);
wenn die Methode zurückkehrtvoid
.willThrow()
normalerweise zulässig ist, habe ich einen Gist geschriebendoAnswer
vonnhaarman.mockitokotlin2
Beachten Sie, dass in der Regel Mockito nicht geprüfte Ausnahmen werfen lassen , so lange die Ausnahme in der Nachrichtensignatur deklariert wird. Zum Beispiel gegeben
Es ist legal zu schreiben:
Wenn Sie jedoch eine aktivierte Ausnahme auslösen, die nicht in der Methodensignatur deklariert ist, z
Mockito schlägt zur Laufzeit mit der etwas irreführenden, generischen Meldung fehl:
Dies kann dazu führen, dass Sie glauben, dass geprüfte Ausnahmen im Allgemeinen nicht unterstützt werden. Tatsächlich versucht Mockito jedoch nur, Ihnen mitzuteilen, dass diese geprüfte Ausnahme für diese Methode nicht gültig ist .
quelle
Mit Kotlin gibt es die Lösung:
Woher kommt kommt
quelle
Das funktioniert bei mir in Kotlin:
Hinweis: Wirf eine andere definierte Ausnahme als Exception () aus.
quelle
Exception