7
votes

PHPUNIT - Test Controller MVC avec variable $ _Post

Je commence au travail avec PHPUnit avec Kohana. Mon application dispose de nombreux contrôleurs qui apportent simplement des données provenant d'une forme, valide et des insertions / mises à jour / supprime / / - / de la base de données. Comment devrais-je écrire un cas de test pour cela?

Je sais que si je veux tester une fonction, je rédige une fonction de fournisseur de données et simplement comparer la valeur retournée avec l'attendu. Mais mes données d'entrée (données des formulaires) sont transmises dans $ _ POST variable. Comment devrais-je tester cela? Et après cela, devrais-je vérifier si des données insérées sont vraiment dans la base de données? S'il vous plaît donner mes lignes directrices pour ce type de tests ou de liens vers certains exemples / tutoriels. Merci.


0 commentaires

3 Réponses :


16
votes

Tout d'abord, si vous testez toutes les tâches de recevoir les données publiées à la vérification des valeurs de la base de données, ce n'est plus unitaire: vous ne testez pas un composant isolément des autres, mais vous testez l'intégration de ces composants ensemble.

Cela rend les choses plus difficiles à tester:

  • Vous devez fournir des données de manière plus difficile: non seulement comme paramètres à une méthode, mais comme paramètres de votre application entière (ce qui signifie forger des données post, par exemple)
  • Vous avez plus de choses à vérifier: non seulement la valeur de retour d'une méthode, ou s'il a jeté une exception
  • Vous avez plusieurs choses différentes et peut-être non liées pouvant causer une défaillance (problème dans un code PHP, problème dans la base de données, serveur de base de données non disponible, ...) , qui fera des échecs plus difficile de suivre pour trouver leur cause.


    Notez que je n'ai pas dit que ce type d'essais «intégration» n'est pas utile, BTW; -)


    Néanmoins, forgeant le tableau _ / code> est assez simple: il n'est pas en lecture seule et vous pouvez stocker ce que vous voulez.

    Donc, au début de votre test de test, rien ne vous empêche d'injecter des données dont vous avez besoin.


0 commentaires

2
votes

Qu'est-ce que Pascal a dit. Notez également qu'il existe des outils spécifiquement pour tester l'interaction sur le niveau HTTP / Navigateur. Vous pouvez utiliser les cas de test Web de SimpleTest (utilise un navigateur émulé / scriptable). Si vous préférez PHPUNIT, je pense que vous pouvez utiliser assez facilement le navigateur de SimpleTest de PHPUnit. Sinon, il y a l'IDE Sélénium plus lourd, pour lequel PHPUNIT a une intégration.


0 commentaires