Puis-je (vraiment) me moquer des méthodes privées dans PHPUnit ?

Susan Sarandon
Libérer: 2024-10-29 10:17:30
original
666 Les gens l'ont consulté

Can I (Really) Mock Private Methods in PHPUnit?

Comment se moquer des méthodes privées dans PHPUnit

Problème :

Dans certains scénarios, les tests des sections spécifiques d'une classe peuvent être difficiles en raison de la présence de méthodes privées appelées en interne. Comment pouvons-nous écraser les résultats d'une méthode privée pour tester le code souhaité ?

Réponse :

Importance de l'API publique :

En règle générale, lors du test d'une classe, il est recommandé de se concentrer sur son API publique car elle représente le contrat proposé par votre classe. Les méthodes privées et protégées sont des détails d'implémentation et ne devraient pas affecter la stabilité de vos tests.

Test des modifications de l'état global :

Dans certains cas, une méthode privée peut contenir de la logique cela dépend de l’état global, ce qui rend les tests difficiles. Pour résoudre ce problème, envisagez de refactoriser votre code pour éliminer l'état global et introduire des dépendances qui peuvent être injectées dans la classe.

Utilisation du framework Mocking pour se moquer des méthodes privées :

Si il est inévitable de tester directement une méthode privée, PHPUnit fournit un moyen de se moquer des méthodes privées en utilisant son framework de simulation. Cependant, cette approche est généralement déconseillée car elle rompt l'encapsulation et peut conduire à une dépendance excessive aux détails d'implémentation.

Pour simuler une méthode privée à l'aide de PHPUnit, vous pouvez suivre ces étapes :

  1. Créez une simulation de la classe en utilisant $testMe = $this->getMock("a", array("c"));
  2. Configurez le comportement attendu à l'aide des attentes() et de la méthode() méthodes.
  3. Exécutez vos tests contre la classe moquée.

Citation de "Pragmatic Unit Testing":

"En général, vous Je ne veux pas casser une encapsulation pour le plaisir de tester... La plupart du temps, vous devriez pouvoir tester une classe en exerçant ses méthodes publiques."

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal