Les Tests De Classes Abstraites
Comment puis-je tester les modalités concrètes d'une classe abstraite avec PHPUnit?
Je m'attends que j'aurais à créer une sorte d'objet en tant que partie de l'épreuve. Bien, j'ai aucune idée de la meilleure pratique pour ceci ou si PHPUnit le permet.
- Peut-être vous devriez envisager de changer la accepté de répondre.
- Peut-être que stackoverflow.com/a/2947823/23963 de l'aide.
Vous devez vous connecter pour publier un commentaire.
Tests unitaires de classes abstraites ne veut pas nécessairement dire les tests de l'interface, comme les classes abstraites peuvent avoir des méthodes concrètes, et ce en béton méthodes d'essai.
Il n'est pas si rare que, lors de la rédaction d'un code de bibliothèque, de certains de la classe de base que vous attendez d'étendre dans votre couche application. Et si vous voulez vous assurer que le code de la bibliothèque est testé, il faut avoir des moyens pour UT les méthodes concrètes de classes abstraites.
Personnellement, je utiliser PHPUnit, et il a donc appelé les talons et les objets fantaisie pour vous aider à tester ce genre de choses.
Directement à partir de PHPUnit manuel:
Objet fantaisie de vous proposer plusieurs choses:
C'est une bonne question. J'ai été la recherche de ce trop.
Heureusement, PHPUnit a déjà
getMockForAbstractClass()
méthode pour ce cas, par exemple,Important:
À noter que cela nécessite PHPUnit > 3.5.4. Il n'y a un bug dans les versions précédentes.
À la mise à niveau vers la version la plus récente:
Il convient de noter qu'à partir de PHP 7 support pour les classes anonymes a été ajouté. Cela vous donne une option supplémentaire pour la mise en place d'un test pour une classe abstraite, qui ne dépend pas de PHPUnit de fonctionnalités spécifiques.
Eran, votre méthode de travail, mais il va à l'encontre de la tendance d'écrire les tests avant le code.
Ce que je suggère, c'est d'écrire vos tests sur les fonctionnalités souhaitées d'un non-abstraite sous-classe de la classe abstraite en question, puis d'écrire à la fois de la classe abstraite et la mise en œuvre de la sous-classe, et enfin exécuter le test.
Vos tests doivent évidemment test de la définition des méthodes de la classe abstraite, mais toujours via la sous-classe.
Nelson réponse est fausse.
Les classes abstraites ne nécessitent pas l'ensemble de leurs méthodes abstraites.
La mise en œuvre de méthodes sont celles que nous avons besoin de tester.
Ce que vous pouvez faire est de créer un faux de la classe de stub sur l'unité fichier de test, ont-il étendre la classe abstraite et de mettre en œuvre ce qui est nécessaire avec aucune fonctionnalité à tous, bien sûr, et de le tester.
Acclamations.
Si vous ne voulez pas à la sous-classe de la classe abstraite juste pour effectuer un test unitaire sur les méthodes qui sont mises en œuvre dans la classe abstraite déjà, vous pourriez essayer de voir si votre cadre vous permet de maquette les classes abstraites.