Mockito, les Usages de ne rien faire() Si()
Je suis nouveau sur Mockito, et je suis allé sur cet exemple, mais il y a une étape que je ne comprends pas quand il appelle doNothing()
sur la première ligne de la méthode:
@Test(expected = RuntimeException.class)
public void testConsecutiveCalls() throws Exception(){
doNothing().doThrow(Exception.class).when(b).voidMethod();
a.usesVoidMethod()
verify(b).voidMethod();
a.usesVoidMethod()
}
Je comprends que, lorsque la première fois voidMehtod()
est appelé retourne rien, et dans le deuxième temps, c'est de donner une exception.
Mais si on enlève le doNothing.doThrow(Exception.class).when(b).voidMethod();
, de ne pas le test soit valide et vous permettra de tester ce que nous voulons tester si la méthode lève une exception en la seconde fois?
Vous devez vous connecter pour publier un commentaire.
Quelques points, numérotés simplement pour la facilité de référence:
Le comportement par défaut d'un se moquer de est de retour approprié valeur factice à chaque fois, souvent zéro,
null
, ou une chaîne vide. Le comportement par défaut d'un espion est l'appel de l'espion de la mise en œuvre réelle. Bien sûr, par l'intermédiaire des paramètres de@Mock
ouMockito.mock
, vous pouvez utiliser un arbitraire de la Réponse ou de l'une de Mockito est standard ou supplémentaires réponses.Lorsque plusieurs actions sont donné comme une partie d'une chaîne, Mockito fera de chaque action de la séquence et de toujours répéter la dernière action.
Noter que c'est au sein de la même chaîne; le plus récemment défini correspondant de la chaîne gagne, états distincts n'aurait pas le même effet.
doNothing
, puis, tire l'essentiel de sa valeur soit primordial comportement par défaut ou la configuration d'une action dans une chaîne.Alors que le test est essayer à faire est de
doNothing
la première fois que de telles que la vérification réussit, et puisdoThrow
la deuxième fois de satisfaire les besoins attendus exception. Si l'échec d'uneverify
serait (bien) ne passent pas le test parce que Mockito les erreurs de sous-classe d'une Erreur et non d'Exception, vous avez raison, la suppression de ladoNothing
serait toujours provoquer le test à passer par jeter l'exception sur le premier appel àa.usesVoidMethod()
. Bien que ce soit assez fine pour le test--après tout, vous pouvez voir l'doNothing
dans le test lui-même, bien plus robuste test pourrait ressembler à ceci:La
doNothing
méthode ne change pas le comportement d'unmocked' method, but the declaration of the
doThrowdoes. If you have a spy and don't want a method to be executed, then
ne rien faire` va changer le comportement.doThrow(Exception.class)
est en train de changer cela? Si je ne retirezdoNothing().doThrow(Exception.class).when(b).voidMethod();
quel est l'effet secondaire derrière cela?