web-dev-qa-db-fra.com

Méthode privée de test unitaire - objectif C

J'utilise GHUnit. Je veux tester en bloc des méthodes privées et je ne sais pas comment les tester. J'ai trouvé beaucoup de réponses sur pourquoi ou pourquoi ne pas tester des méthodes privées. Mais je n'ai pas trouvé comment les tester.

Je ne voudrais pas discuter si je devrais tester des cours privés ou non, mais je me concentrerai sur la façon de le tester.

Quelqu'un peut-il me donner un exemple de test de méthode privée?

38
Geek

Les méthodes d'Objective-C ne sont pas vraiment privées. Le message d'erreur que vous obtenez est que le compilateur ne peut pas vérifier que la méthode que vous appelez existe car elle n'est pas déclarée dans l'interface publique.

Le moyen de contourner ce problème consiste à exposer les méthodes privées dans une catégorie de classe, qui indique au compilateur que les méthodes existent.

Ajoutez donc quelque chose comme ceci en haut de votre fichier de cas de test:

@interface SUTClass (Testing)

- (void)somePrivateMethodInYourClass;

@end

SUTClass est le nom réel de la classe pour laquelle vous écrivez des tests.

Cela rendra votre méthode privée visible et vous pourrez la tester sans les avertissements du compilateur.

107
Abizern

Un peu tard, mais je viens de monter dans le train TDD.

Les méthodes privées ne doivent pas être testées. Parce que vous écrivez des méthodes privées pour prendre en charge vos méthodes publiques, tester vos méthodes publiques teste donc indirectement les méthodes privées qui les prennent en charge.

Le principe "les méthodes privées ne doivent pas être testées" est soutenu par le principe "lorsque vous devez tester des méthodes privées, cela signifie probablement que vous devez déplacer ces méthodes dans la classe séparée", ce qui les rend Publique.

7
Lord Zsolt

En accord avec @Lord Zsolt

Veuillez également noter ensuite (à partir de Développement iOS piloté par les tests ISBN-10: 0-321-77418-3, ISBN-13: 978-0-321-77418-7)

Test de méthodes privées

On m'a souvent demandé: "Dois-je tester mes méthodes privées?" ou la question connexe "Comment dois-je tester mes méthodes privées?" Les personnes posant la deuxième question ont supposé que la réponse à la première était "Oui" et cherchent maintenant un moyen d’exposer les interfaces privées de leurs classes dans leurs suites de tests.

Ma réponse repose sur l'observation d'un fait subtil: vous avez déjà testé vos méthodes privées. En suivant l'approche rouge-vert-refactor commun dans le développement piloté par les tests, vous avez conçu les API publiques de vos objets pour faire le travail que ces objets doivent faire. Avec ce travail spécifié par les tests - et l'exécution continue des tests vous assurant que vous n'avez rien cassé - vous êtes libre d'organiser la plomberie interne de vos classes comme bon vous semble. Vos méthodes privées sont déjà testées, car tout ce que vous faites est de refactoriser le comportement pour lequel vous avez déjà des tests.

Vous ne devez jamais vous retrouver dans une situation où une méthode privée n'est pas testée ou est incomplètement testée, car vous ne les créez que lorsque vous voyez une opportunité de nettoyer l'implémentation des méthodes publiques. Cela garantit que les méthodes privées existent uniquement pour prendre en charge le comportement public de la classe et qu'elles doivent être invoquées pendant les tests car elles sont définitivement appelées à partir de méthodes publiques.

4
gbk

Si une méthode est privée, vous ne devriez jamais la tester.

Penses-y. Vous devriez tester le comportement et le contrat de vos méthodes au lieu de l'implémentation interne

2
seufagner