7
votes

Appelez la méthode statique sur le paramètre sans instanciation de la classe en argument

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());


3 commentaires

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 . Accéder aux méthodes statiques via une instance me semble déroutante car elle n'est pas liée à cette instance , et cela peut ne pas fonctionner comme vous le pensez.


BTW, utilisez le modèle Singleton au lieu de méthodes statiques dans votre cas?


7 Réponses :


0
votes

Dans votre code Échantillon:

public void method(){
    OtherClass.staticMethod();
}


0 commentaires

0
votes

Vous pouvez utiliser votre première approche en modifiant votre méthode comme celle-ci xxx

et vous pouvez l'invoquer en appelant xxx

sans passer un nouvel objet de cette classe


0 commentaires

0
votes

Vous pouvez utiliser la réflexion: xxx

puis, xxx


0 commentaires

0
votes

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);
    }


0 commentaires

0
votes

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();
            }
        };
    }
}


0 commentaires

1
votes

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());

0 commentaires

0
votes

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: xxx

puis utilisez une instance de ce paramètre pour votre méthode. xxx

et d'appeler ceci Ensuite, faites. xxx

espère que cela aide!


0 commentaires