148 votes

Test des classes abstraites

Comment tester les méthodes concrètes d'une classe abstraite avec PHPUnit ?

Je m'attendrais à devoir créer une sorte d'objet dans le cadre du test. Cependant, je n'ai aucune idée de la meilleure pratique pour cela ou si PHPUnit le permet.

10 votes

Vous devriez peut-être envisager de modifier la réponse acceptée.

1 votes

Peut-être stackoverflow.com/a/2947823/23963 vous aidera.

0voto

hangy Points 7722

Si vous ne voulez pas sous-classer la classe abstraite juste pour effectuer un test unitaire sur les méthodes qui sont déjà implémentées dans la classe abstraite, vous pouvez essayer de voir si votre framework vous permet de simuler les classes abstraites.

-13voto

nlaq Points 11379

Lorsque vous utilisez les tests unitaires, vous ne testez pas l'interface en soi mais la fonctionnalité. Vous ne pouvez pas tester la fonctionnalité d'une classe abstraite car elle n'en a pas.

Lorsque vous faites un test, vous écrivez d'abord le test. avant vous écrivez l'interface. Par exemple : Je pourrais écrire le test suivant :

$user = UserFactory::CreateUser();
$user->user_username = "nelson";
$user->Save();
$id = $user->user_id;

$user2 = UserFacotry::CreateUser();
$user2->Load($id);
if ($user2->user_username != "nelson")
    die a miserable death

Avant d'écrire réellement le code. Après cela, j'écrirais la classe abstraite de l'utilisateur :

abstract class IUser
{
    abstract function Load();
    abstract function Save();
}
Puis j'écrirais une classe User qui étend IUser. Puis j'écrirais le UserFactory qui renvoie un objet User. Enfin, j'exécuterais à nouveau le test pour voir s'il fonctionne.

)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X