J'essaie de faire en sorte que l'un de mes objets simulés lève une exception cochée lorsqu'une méthode particulière est appelée. J'essaye ce qui suit.
@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 {
}
Cependant, cela produit l'erreur suivante.
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
En regardant la documentation Mockito , ils utilisent seulement RuntimeException
, n'est-il pas possible de lancer des exceptions vérifiées à partir d'un objet fictif avec Mockito?
Throws
annotation pour que le compilateur génère le même bytecode que la déclaration de throws dans le code Java équivalent. Voir [ici] ( kotlinlang.org/api/latest/jvm/stdlib/kotlin.jvm/-throws/… ) pour plus de détails.Une solution de contournement consiste à utiliser une
willAnswer()
méthode.Par exemple, ce qui suit fonctionne (et ne lance pas un
MockitoException
mais jette en fait un vérifiéException
comme requis ici) en utilisantBDDMockito
:L'équivalent de Mockito ordinaire serait d'utiliser la
doAnswer
méthodela source
willAnswer( invocation -> { throw new Exception("abc msg"); }).given(someObj).someMethod(stringArg1);
lorsque la méthode retournevoid
.willThrow()
permet normalement, j'ai écrit un GistdoAnswer
denhaarman.mockitokotlin2
Notez qu'en général, Mockito permet de lever des exceptions vérifiées tant que l'exception est déclarée dans la signature du message. Par exemple, étant donné
il est légal d'écrire:
Cependant, si vous lancez une exception vérifiée non déclarée dans la signature de la méthode, par exemple
Mockito échouera au moment de l'exécution avec le message générique quelque peu trompeur:
Cela peut vous amener à croire que les exceptions vérifiées en général ne sont pas prises en charge, mais en fait Mockito essaie seulement de vous dire que cette exception vérifiée n'est pas valide pour cette méthode .
la source
Il y a la solution avec Kotlin:
D'où vient
la source
Cela fonctionne pour moi à Kotlin:
Remarque: lancez toute exception définie autre que Exception ()
la source
Exception