Note du modérateur: Il y a déjà 39 réponses publiées ici (certaines ont été supprimées). Avant de publier votre réponse, demandez-vous si vous pouvez ou non ajouter quelque chose de significatif à la discussion. Vous répétez probablement ce que quelqu'un d'autre a déjà dit.
Je me trouve parfois obligé de rendre une méthode privée dans une classe publique juste pour écrire des tests unitaires pour elle.
Habituellement, cela serait dû au fait que la méthode contient une logique partagée entre d'autres méthodes de la classe et qu'il est plus ordonné de tester la logique seule, ou une autre raison pourrait être possible car je veux tester la logique utilisée dans les threads synchrones sans avoir à se soucier des problèmes de threading .
Est-ce que d'autres personnes se retrouvent à faire ça, parce que je n'aime pas vraiment le faire ?? Personnellement, je pense que les bonus l'emportent sur les problèmes de rendre publique une méthode qui ne fournit pas vraiment de service en dehors de la classe ...
METTRE À JOUR
Merci pour les réponses à tous, semble avoir éveillé l'intérêt des gens. Je pense que le consensus général est que les tests devraient se produire via l'API publique car c'est la seule façon dont une classe sera jamais utilisée, et je suis d'accord avec cela. Les quelques cas que j'ai mentionnés ci-dessus où je ferais cela ci-dessus étaient des cas rares et je pensais que les avantages de le faire en valaient la peine.
Je peux cependant voir tout le monde que cela ne devrait jamais vraiment arriver. Et en y réfléchissant un peu plus, je pense que changer votre code pour prendre en charge les tests est une mauvaise idée - après tout, je suppose que les tests sont en quelque sorte un outil de support et changer un système pour 'supporter un outil de support' si vous voulez, est flagrant mauvaise pratique.
@VisibileForTesting
annotation pour créer de telles méthodes - je vous recommande de le faire pour que la raison pour laquelle la méthode n'est pas private
correctement documentée.