2010-09-11 11 views
6

Disons que j'ai une classeEst-ce un bon cas pour espion Mockito?

class SomeClass 
{ 
    public void methodA() 
    {} 

    public void methodB() 
    {} 

    public void someMethod() 
    { 
    methodA(); 
    methodB(); 
    } 
} 

Je voudrais tester le comportement de someMethod() avec Mockito.

La seule façon dont je pouvais penser est d'utiliser spy();

Quelque chose comme

SomeClass someClass = spy(new SomeClass()); 
someClass.someMethod(); 
InOrder inOrder = inOrder(someClass); 
inOrder.verify(someClass).methodA(); 
inOrder.verify(someClass).methodB(); 

Je suis nouveau à la Mockito et la documentation dit

« espions réels devraient être utilisés avec prudence et de temps en temps, par exemple en traitant avec le code existant. »

Alors peut-être qu'il me manque quelque chose et il y a une meilleure façon (à droite) de vérifier que methodA et methodB ont été appelés sans les appeler explicitement dans le cas de test.

Merci.

Répondre

6

Oui, spy() est adapté à vos besoins. L'avertissement est dû au fait que de vraies méthodes sont invoquées, et donc vous pouvez obtenir des résultats inattendus (par exemple, l'argent réel étant retiré d'un compte bancaire)

-1

Si votre code a besoin d'espion pour les tests unitaires - quelque chose ne va pas. Spy est un premier signe d'odeur de code. Vous avez deux options pour l'éviter dans votre exemple:

  1. Vous pouvez éviter un moqueur de la méthode et tester l'ensemble someMethod.
  2. Si methodA et methodB doivent vraiment être raillés - vous pouvez les déplacer dans une classe séparée, etc.