Maquette de la classe dans la classe sous test
Comment je peux fantaisie avec Mockito d'autres classes dans ma classe qui est en cours de test?
Par exemple:
MyClass.java
class MyClass {
public boolean performAnything() {
AnythingPerformerClass clazz = new AnythingPerformerClass();
return clazz.doSomething();
}
}
AnythingPerformerClass.java
class AnythingPerformerClass {
public boolean doSomething() {
//very very complex logic
return result;
}
}
Et de test:
@Test
public void testPerformAnything() throws Exception {
MyClass clazz = new MyClass();
Assert.assertTrue(clazz.performAnything());
}
Puis-je usurper AnythingPerformerClass
pour l'exclusion des inutiles logique de AnythingPerformerClass
? Puis-je remplacer doSomething()
méthode simple retour true
ou false
?
Pourquoi je précise Mockito, car j'en ai besoin pour Android test avec Robolectric.
Pourquoi avez-vous instanciez une instance de la classe pour chaque appel de méthode? Qui ressemble au sérieux exagéré
OriginalL'auteur NikedLab | 2013-07-19
Vous devez vous connecter pour publier un commentaire.
Vous pourriez refactoriser
MyClass
de sorte qu'il utilise l'injection de dépendance. Au lieu d'avoir à créer unAnythingPerformerClass
exemple, vous pourriez passer une instance de la classe pour le constructeur deMyClass
comme suit :Vous pouvez ensuite passer à la simulation de la mise en œuvre dans l'unité de test
Alternativement, si votre
AnythingPerformerClass
contient de l'état, alors vous pouvez passer uneAnythingPerformerClassBuilder
du constructeur.boolean
serafalse
, si ce test échoue.Eh bien, j'ai omis l'étape où l'appel de méthode est tournée en dérision. L'OP dit: "puis-je remplacer doSomething() la méthode simple pour retourner vrai ou faux?" Donc, je ne pense pas que je devrait contraindre le code.
OriginalL'auteur cyon
Comme c'est le cas actuellement (à la fois la déclaration et l'instanciation de la
AnythingPerformerClass
à l'intérieur d'une méthode, il n'est pas possible de se moquer de l'AnythingPerformerClass
en utilisant uniquement Mockito.Si possible, de se déplacer à la fois la déclaration et l'instanciation de
AnythingPerformerClass
au niveau de la classe: déclarer une variable d'instance de typeAnythingPerformerClass
et avoir instancié par le constructeur.De cette façon, vous pouvez plus facilement injecter un simulacre de
AnythingPerformerClass
lors de l'essai, et de préciser son comportement. Par exemple:ou de test d'erreur de manipulation:
OriginalL'auteur mthmulders
Vous pouvez définir ce qu'il doit retourner dans Mockito.
OriginalL'auteur mokuril