2013-08-01 4 views
1

J'essaie d'envelopper ma tête autour de mockito et je me demandais comment je testerais si une méthode appelle une méthode!Junit et Mockito: Comment tester si une méthode appelle une méthode?

est classe donc ici avec sa méthode à l'intérieur:

public class RegisterController { 

    public void regHandle(UserDataObject user1){ 

     ValidateRegisterInputController validate = new ValidateRegisterInputController(); 
     validate.validateInputHandle(user1); } 

Comment puis-je vérifier que regHandle (UserDataObject) appelle validate.validateInputHandle (user1); ? Je suis sûr que c'est un test super simple, mais je ne peux vraiment pas comprendre comment tester cela.

+0

Question dupliquée: http://stackoverflow.com/questions/17975470/how-to-write-a-junit-testcase-for-a-void-method-that-creates-a-new-object/17975957# 17975957 –

+0

En l'état, vous ne pouvez pas. Vous devez extraire la création de variable 'ValidateRegusterInputController' de la méthode et la simuler. –

+0

@SotiriosDelimanolis pas réellement correct étant donné PowerMock –

Répondre

1

Vous créez un faux de ValidateRegisterInputController, puis passez-le à la construction, alors vous feriez: Mockito.verify (simulacre) .validateInputHandle (user1).

Je vous suggère fortement de ne pas faire ce genre de test. Au lieu de cela, demandez-vous comment vous pouvez écrire un test unitaire qui vérifie que ce que vous vouliez valider était valide. Par exemple, vérifiez que, après avoir appelé regHandle, user1.isValid() est égal à true.

+0

Cela ne fonctionnerait que si 'RegisterController' fonctionnait sur une seule instance de' ValidateRegisterInputController'. Le code crée une nouvelle instance chaque fois que la méthode est appelée. Si le code peut réutiliser la même instance, cette réponse sera valide. Je ne sais pas non plus que vérifier 'isValid' est mieux que de vérifier un appel à un simulacre. Que faire si la méthode doit être appelée même si elle est déjà définie? Comment l'appel serait-il vérifié? Vous faites beaucoup d'hypothèses dans votre réponse concernant le code et les exigences. –

+0

Je dis juste que, d'après mon expérience personnelle, le code se lit mieux et teste les meilleurs si vous le refactorisez pour ne pas dépendre de moqueurs –

3

Il existe différentes façons d'écrire un test pour une méthode qui instancie une autre classe. J'ai écrit sur deux d'entre eux dans mon article sur le wiki Mockito, au http://code.google.com/p/mockito/wiki/MockingObjectCreation

Les deux techniques que je décris impliquent de refactoriser votre code pour le rendre plus testable.

Questions connexes