78 votes

Mocking de méthodes d'objets de portée locale avec Mockito

J'ai besoin d'aide à ce sujet :

Exemple :

void method1{
    MyObject obj1=new MyObject();
    obj1.method1();
}

Je veux me moquer obj1.method1() dans mon test mais pour être transparent, je ne veux pas faire de changement de code. Y a-t-il un moyen de faire cela dans Mockito ?

1voto

Garrett Hall Points 11902

Vous pouvez le faire en créant une méthode d'usine dans MyObject :

class MyObject {
    public static MyObject create() {
      return new MyObject();
    }
}

puis le simuler avec PowerMock .

Cependant, en simulant les méthodes d'un objet de portée locale, vous dépendez de la partie de l'implémentation de la méthode qui reste la même. Vous perdez donc la possibilité de remanier cette partie de la méthode sans rompre le test. En outre, si vous bloquez les valeurs de retour dans l'objet fantaisie, votre test unitaire peut réussir, mais la méthode peut se comporter de manière inattendue lorsqu'elle utilise l'objet réel.

En résumé, vous ne devriez probablement pas essayer de le faire. En laissant plutôt le test piloter votre code (aka TDD), vous arriveriez à une solution comme celle-ci :

void method1(MyObject obj1) {
   obj1.method1();
}

en passant la dépendance, que vous pouvez facilement simuler pour le test unitaire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X