2010-05-15 6 views
1

Je en ai besoin dans FlexUnit pour tester des méthodes privées. Y a-t-il une possibilité de faire cela par réflexion en utilisant describeType ou peut-être que flexUnit a une facilité de construction? Je n'aime pas la limitation artificielle que je ne peux pas tester les fonctions privées, cela réduit considérablement la flexibilité. Oui c'est un bon design pour moi de tester des fonctions privées, donc s'il vous plaît ne me conseille pas de refactoriser mon code. Je ne veux pas casser l'encapsulation pour des tests unitaires.Appel de la méthode privée dans Flex, Actionscript

Répondre

6

Je suis 99% certain que ce n'est pas possible et je suis intrigué de savoir pourquoi vous voulez faire cela.

Vous devriez être tester l'unité la sortie d'une classe donnée, à partir des contributions données, peu importe ce qui se passe à l'intérieur de la classe. Vous voulez vraiment permettre à quelqu'un de pouvoir modifier les détails d'implémentation tant qu'il ne change pas les résultats attendus (définis par le test unitaire).

Si vous testez des méthodes privées, les modifications apportées à la classe seront étroitement couplées aux tests unitaires. Si quelqu'un veut réorganiser le code pour améliorer la lisibilité, ou faire des mises à jour pour améliorer les performances, il devra mettre à jour les tests unitaires même si la classe fonctionne toujours comme elle a été conçue à l'origine.

Je suis sûr qu'il ya des cas de bord où des méthodes d'essai privées pourraient être bénéfiques, mais je vous attendriez dans la plupart des cas, il est tout simplement pas nécessaire. Vous n'avez pas à casser l'encapsulation, juste tester que vos appels de méthode donnent des sorties correctes ... peu importe ce que le code fait en interne.

1

Vous ne pouvez pas utiliser describeType pour cela.

De l'Livedocs - flash.utils package:

[...]

Note:describeType() affiche uniquement les propriétés et méthodes publiques, et ne montrera pas propriétés et méthodes privées, paquet interne ou dans les espaces de noms personnalisés.

[...]

2

Il suffit de créer une méthode publique appelée "UnitTest" et appeler tous vos tests unitaires dans cette méthode. Jetez une erreur lorsque l'un d'entre eux tombe en panne et l'appeler de votre cadre de test:

try { 
    myobject.unitTest(); 
} catch (Exception e) { 
    //etc. 
} 
0

Lorsque l'envie de tester une méthode privée est irrésistible que je viens de créer un espace de noms testable pour la méthode.

Déclarer un espace de noms dans un fichier comme celui-ci:

package be.xeno.namespaces 
{ 
    public namespace testable = "http://www.xeno.be/2015/testable"; 
} 

Ensuite, vous pouvez utiliser le testable comme modificateur d'accès personnalisé pour la méthode que vous voulez tester comme ceci:

public class Thing1 
{ 
    use namespace testable; 

    public function Thing1() 
    { 
    } 

    testable function testMe() : void 
    { 

    } 
} 

Vous pouvez puis accédez à ce modificateur en utilisant l'espace de noms dans vos tests:

public class Thing2 
{ 
    use namespace testable; 

    public function Thing2() 
    { 
     var otherThing : Thing1 = new Thing1(); 
     otherThing.testMe(); 
    } 
} 

Vraiment bien que je t Hink c'est un indice que vous devriez diviser votre fonctionnalité dans une classe distincte.

Questions connexes