Tests unitaires avec mockito pour les constructeurs
J'ai une classe.
Class First {
private Second second;
public First(int num, String str) {
second = new Second(str);
this.num = num;
}
... //some other methods
}
Je veux écrire des tests unitaires pour les méthodes publiques de la classe de Première. Je veux éviter de l'exécution du constructeur de la classe de Seconde.
Je l'ai fait:
Second second = Mockito.mock(Second.class);
Mockito.when(new Second(any(String.class))).thenReturn(null);
First first = new First(null, null);
Il est toujours appeler le constructeur de la classe de Seconde. Comment puis-je l'éviter?
- Double Possible de stackoverflow.com/questions/6288575/...
Vous devez vous connecter pour publier un commentaire.
Une fois de plus le problème avec les tests unitaires vient de créer manuellement des objets à l'aide de
new
de l'opérateur. Envisager l'adoption déjà crééSecond
à la place:Je sais que cela peut signifier la réécriture majeure de votre API, mais il n'y a pas d'autre moyen. Aussi cette classe n'ont pas de sens:
Tout d'abord Mockito peut seulement se moquer de méthodes, constructeurs. Deuxièmement, même si vous avez pu se moquer de constructeur, vous êtes moqueur constructeur de venez de créer un objet et de ne jamais vraiment rien faire avec cet objet.
Second
constructeur, comme la réponse par @terma montre.Second
, dans le constructeur, comment pourrait se moque de lui?Vous pouvez utiliser PowerMockito
Voir l'exemple:
Mais re-factoring est une meilleure décision.
Voici le code pour se moquer de cette fonctionnalité à l'aide PowerMockito API.
Vous devez utiliser Powermockito runner et le besoin d'ajouter des classes de test (séparées par des virgules ) qui sont nécessaires pour être raillé par powermock API .
J'ai utilisé "Modèle 2 - la "fabrique helper modèle"
Source: http://web.archive.org/web/20160322155004/http://code.google.com/p/mockito/wiki/MockingObjectCreation
Je crois, il n'est pas possible de se moquer des constructeurs à l'aide de mockito. Au lieu de cela, je suggère la démarche suivante