Cela dépend si la méthode fait partie d'une API publique ou non. Si une méthode n'appartient pas à une partie d'une API publique, mais est appelée publiquement à partir d'autres types au sein du même assembly, utilisez internal, friend votre ensemble de test unitaire et testez-la.
Cependant, si la méthode n'est pas/ne doit pas faire partie d'une API publique et qu'elle n'est pas appelée par d'autres types internes à l'assembly, NE la TESTEZ PAS directement. Il devrait être protégé ou privé, et il devrait seulement être testé indirectement par des tests unitaires de votre API publique. Si vous écrivez des tests unitaires pour des membres non publics (ou qui devraient être non publics) de vos types, vous liez le code de test aux détails d'implémentation internes.
C'est un mauvais type de couplage, augmente la quantité de tests unitaires dont vous avez besoin, augmente la charge de travail à court terme (plus de tests unitaires) et à long terme (maintenance et modification du test en réponse à la refactorisation interne). Détails d'implémentation). Un autre problème lié au test de membres non publics est que vous testez du code qui peut ne pas être nécessaire ou utilisé. Une excellente façon de trouver du code mort est quand il n'est couvert par aucun de vos tests unitaires lorsque votre API publique est couverte à 100%. Supprimer le code mort est une excellente façon de garder votre base de code légère et méchante, et est impossible si vous ne faites pas attention à ce que vous mettez dans votre API publique, et aux parties de votre code que vous testez. En guise de note complémentaire rapide ... avec une API publique correctement conçue, vous pouvez très efficacement utiliser un outil comme Microsoft PEX pour générer automatiquement des tests unitaires de couverture complète qui testent chaque chemin d'exécution de votre code.Combiné avec quelques tests écrits manuellement qui couvrent le comportement critique, tout ce qui n'est pas couvert peut être considéré comme un code mort et supprimé, et vous pouvez grandement raccourcir votre processus de test unitaire.
Vous avez atteint le point crucial de mon problème - les méthodes internes sont encore trop exposées beaucoup, car ce sont des méthodes que les autres classes de l'assembly ne devraient pas appeler. Je suis tout à fait d'accord avec vous sur le fait que tester ce qui devrait être des méthodes non-publiques lie trop étroitement le code de test à la mise en œuvre. – Eric
@Eric: alors vous documentez et appliquez que ces méthodes ne doivent pas être appelées. La nouvelle fonction Diagrammes de couche de VS2010 peut y aider, car on peut créer des restrictions sur la manière dont une couche peut interagir avec une autre - ces restrictions peuvent être appliquées au cours des générations. –
Content d'être utile. :) J'ai ajouté une mise à jour concernant PEX qui pourrait vous intéresser. – jrista