J'apprenais mockito et j'ai compris les utilisations de base des fonctions mentionnées ci-dessus à partir du link .
Mais j'aimerais savoir s'il peut être utilisé dans d'autres cas?
doThrow : essentiellement utilisé lorsque vous voulez lever une exception lorsqu'une méthode est appelée dans un objet fictif.
public void validateEntity(final Object object){}
Mockito.doThrow(IllegalArgumentException.class)
.when(validationService).validateEntity(Matchers.any(AnyObjectClass.class));
doReturn : Utilisé lorsque vous souhaitez renvoyer une valeur de retour lorsqu'une méthode est exécutée.
public Socket getCosmosSocket() throws IOException {}
Mockito.doReturn(cosmosSocket).when(cosmosServiceImpl).getCosmosSocket();
doAnswer : Parfois, vous devez effectuer certaines actions avec les arguments passés à la méthode, par exemple ajouter des valeurs, effectuer des calculs ou même les modifier. doAnswer vous donne l'interface de réponse en cours d'exécution au moment où Lorsque la méthode est appelée, cette interface vous permet d’interagir avec les paramètres via l’argument InvocationOnMock. En outre, la valeur renvoyée par la méthode answer sera la valeur renvoyée par la méthode simulée.
public ReturnValueObject quickChange(Object1 object);
Mockito.doAnswer(new Answer<ReturnValueObject>() {
@Override
public ReturnValueObject answer(final InvocationOnMock invocation) throws Throwable {
final Object1 originalArgument = (invocation.getArguments())[0];
final ReturnValueObject returnedValue = new ReturnValueObject();
returnedValue.setCost(new Cost());
return returnedValue ;
}
}).when(priceChangeRequestService).quickCharge(Matchers.any(Object1.class));
doNothing : Est le plus simple de la liste. En gros, il dit à Mockito de ne rien faire lorsqu'une méthode dans un objet fictif est appelée. Parfois utilisé dans les méthodes de retour nul ou sans effet secondaire, ou sans lien avec les tests unitaires que vous effectuez.
public void updateRequestActionAndApproval(final List<Object1> cmItems);
Mockito.doNothing().when(pagLogService).updateRequestActionAndApproval(
Matchers.any(Object1.class));
Cela dépend du type de double test avec lequel vous souhaitez interagir:
En d'autres termes, vous ne vous moquez que des interactions utiles avec un collaborateur. Par défaut, les fonctions renvoient null, les méthodes void ne font rien.
Si vous testez une classe logique et qu'elle appelle des méthodes vides internes, doNothing est parfait.
Un exemple très simple est que si vous avez une UserService
qui a @Autowired
jpa resposiroty UserRepository
...
class UserService{
@Autowired
UserRepository userRepository;
...
}
puis dans la classe de test pour UserService
vous ferez
...
class TestUserService{
@Mock
UserRepository userRepository;
@InjectMocks
UserService userService;
...
}
@InjectMocks
indique au framework qui prend le @Mock UserRepository userRespository;
et l'injecte dans userService
afin que, plutôt que de connecter automatiquement une instance réelle de UserRepository
, une maquette de UserRepository
sera injectée dans userService
.