J'ai vraiment eu accès à TDD et j'ai commencé à utiliser Mockito en Junit pour améliorer ma capacité à tester le code. J'aimerais vraiment mockito!
J'ai remarqué que je dois changer la façon dont je pense que le codage, comme passer autant que possible les collaborateurs dans des méthodes et la limitation des travaux effectués dans les constructeurs dans la mesure du possible. P>
Le scénario suivant garantissait des conseils des experts ici. P>
Dites que j'ai une méthode, cela va appeler certaines méthodes statiques sur une certaine classe. E.g. P>
public void method(OtherClass util){
util.staticMethod();
}
...
method(new OtherClass());
7 Réponses :
Dans votre code Échantillon:
public void method(){
OtherClass.staticMethod();
}
Vous pouvez utiliser votre première approche en modifiant votre méthode comme celle-ci et vous pouvez l'invoquer en appelant p> sans passer un nouvel objet de cette classe p> p>
Vous pouvez utiliser la réflexion: puis, p>
Voici ce que je viens d'essayer:
public void testMethod(Class<T> clazz) throws Exception{
Method m = clazz.getMethod("staticMethod",null);
m.invoke(null,null);
}
rien de mal dans un peu de code statique ici et là - s'il n'accède pas à un État global:
Si le code statique est purement procédural P>
public class Registry {
DoSomethingInterface getOtherClass() {
return new DoSomethingInterface(){
public void doSomething() {
OtherClass.staticMethod();
}
};
}
}
Cela fonctionnerait, mais je n'aime pas l'instanciation d'autresClass si je n'ai pas besoin, car il s'agit uniquement d'une classe d'utilité statique comme des méthodes: p>
public void method(OtherClass util){ util.staticMethod(); } ... method(new OtherClass());
Je ne suis pas sûr que cela aide. Mais je devais faire quelque chose de similaire mais pas à des fins de test. Et c'est ce que j'ai proposé.
Créer une classe qui une fois instanciée n'a qu'une méthode et appelle la méthode statique d'une autre classe. Et si vous voulez le découpler plus, créez une interface. Quelque chose comme: p> puis utilisez une instance de ce paramètre pour votre méthode. P> et d'appeler ceci Ensuite, faites. p> espère que cela aide! p> p> p>
Question très bien formatée pour un nouvel utilisateur, félicitations :)
Je ne sais pas si votre dernier code sera mot si vous passez une instance d'une sous-classe de
autreclass code>. Accéder aux méthodes statiques via une instance me semble déroutante car elle n'est pas liée à cette instance B>, et cela peut ne pas fonctionner comme vous le pensez.BTW, utilisez le modèle Singleton B> au lieu de méthodes statiques dans votre cas?