Question

Je crois que vous devez être au courant de cet idiome, qui est en quelque sorte l'excuse de java pour les fermetures

//In the "Resource Manager" class
public void process(Command cmd){
  //Initialize
  ExpensiveResource resource = new ExpensiveResource();
  //Use
  cmd.execute(resource);
  //Release / Close
  resource.close();
}

//In the Client class...
manager.process(new Command(){

  public void execute(ExpensiveResource res){
    //Do things with the resource
  }
});

J'ai utilisé cet idiome / modèle beaucoup, mais récemment, je essayé de le tester , et il me donne un mal de tête ...

Comment obtenez-vous de tester dans l'isolement ResourceManager et les classes client? Je trouve que cela leur serré couples tant que vous ne pouvez pas le faire facilement.

Les idées sont appréciés.

Cordialement

Était-ce utile?

La solution

Si vous ne voulez pas faire le type anonyme un type réel, vous pouvez tester, déplacer le code dans sa fonction d'exécution () dans une autre fonction que vous pouvez tester. Le type anonyme devient alors un objet humble ( http://xunitpatterns.com/Humble%20Object.html).

modifier , mais vous devez continuer à trouver un moyen de tester le code dans la fonction anonyme.

Dans un langage typé comme C #, cela peut être fait en ayant l'appel de code anonyme, une fonction de membre virtuel. Le test est spécialisé la classe en remplaçant l'appel de fonction virtuelle, vérifier qu'elle est appelée.

Dans une langue nontypesafe comme Javascript, la fonction de membre appelé est déjà virtuel. Ainsi, plutôt que de créer un type dérivé, vous pouvez remplacer la fonction membre appelée avec une version enregistrée.

Autres conseils

Je pense que les classes anonymes devraient être si petit et simple essai de la structure, y compris / les utiliser devrait être assez bon.

Si vous avez quelque chose si compliqué, grand, important que vous sentez le besoin de le tester en faire une classe complète.

Ne pas utiliser les classes internes anonymes beaucoup (le cas échéant). En plus d'être difficile à tester, ils sont pratiquement impossibles à réutiliser sans copier et coller.

La plupart du temps, ce qui les classe complète permet une plus grande flexibilité et améliore la conception de votre OO (en ajoutant plus de classes améliore presque toujours votre conception).

Par ailleurs, comme vous l'avez mentionné les fermetures ont aussi le même problème -. Difficile de réutiliser

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top