2009-11-16 6 views
4

Dans notre équipe de développement, nous avons décidé d'essayer Unit Testing. Nous utilisons Simpletest. Cependant, ce fut une route difficile. Après une semaine, j'ai seulement créé un test unitaire qui teste un certain fichier d'aide. C'est tout. Le reste (contrôleurs, modèles, vues, bibliothèques) n'a pas encore de tests unitaires. Et je prévois de ne pas tester la majorité d'entre eux. Les vues, par exemple, sont trop triviales pour être testées, donc je renonce à tester cela. Ensuite, les contrôleurs. Je prévois que mes contrôleurs ne font pas de choses complexes, de sorte qu'il ne fait que passer des informations entre les modèles et les vues. Je déplacerais ces choses plus complexes aux bibliothèques ou aux aides.Tests unitaires CodeIgniter avec Simpletest - très peu de tests

Maintenant, pour mes questions:

1) Suis-je le fais mal? Jusqu'à présent, il n'y a rien de plus que je puisse voir qui puisse être erroné, il faudrait donc un test unitaire. La plupart des choses (en ce moment) sont juste CRUD.
2) Avons-nous vraiment besoin d'unités de contrôle de test? Comme le travail d'un contrôleur n'est qu'un traitement mineur des données transmises entre View et Model, je trouve très peu d'initiative dans les tests unitaires.
3) Si j'utilise WebTestCase pour tester des contrôleurs, cela serait-il toujours considéré comme un test unitaire? Ou est-ce déjà un test d'intégration?
4) Supposons que vous m'ayez fait tester mon contrôleur, comment pourrais-je le tester? Pour autant que je sache, CI suit le modèle Front Controller via index.php, alors comment je gérerais (mock?) Ça?

+0

J'ai fait un peu de cela sur asp.net mvc, là les contrôleurs retournent effectivement un ActionResult qui le rend facile à tester. Je ne sais pas comment faire cela, ou même si c'est possible, ou facile à réaliser. –

Répondre

3

Vous faites quelque chose de mal? Je ne pense pas. Avons-nous vraiment besoin de contrôleurs de test unitaires? Je ne. Peut-être que je devrais. On dirait beaucoup de travail, cependant.

Si j'utilise WebTestCase pour tester des contrôleurs, cela serait-il toujours considéré comme un test unitaire? Ou est-ce déjà un test d'intégration? WebTestCase serait une approche intéressante pour tester les contrôleurs si une sortie significative pouvait être détectée; par exemple, détecter qu'aucune erreur ne s'est produite lors de l'appel de/some/specific/path. Supposons que vous me demandiez de tester mon contrôleur, comment le testerais-je? C'est un dur. Vous auriez probablement besoin d'initialiser une partie de l'environnement d'application afin de faire quelque chose qui en vaille la peine.

La plupart des articles/livres vous disent de définir vos tests avant vous commencez à coder. Peut-être que j'ai essayé, mais je suis habituellement trop impatient. Cela semble gêner le prototypage rapide, mais peut-être que la définition des tests unitaires est un moyen de prototypage rapide.

J'ai trouvé que de décider quoi tester avec PHP est un défi. Je pense que vous devez choisir vos batailles. S'il est essentiel qu'une méthode renvoie une valeur de type spécifique, testez-la. Si beaucoup de choses se produisent automatiquement lors de l'instanciation d'un objet, vous pouvez aussi tester cela.

En général, ce que je fais, que ce soit bien ou mal, consiste à tout faire fonctionner, puis à créer des tests de base, puis à ajouter des tests en fonction des problèmes que je rencontre. L'idée est de ne jamais avoir de problème répété et chaque test assurera que l'application se comporte de la même manière tout au long de son cycle de vie. En ce qui concerne les détails, j'utilise Zend Framework, mais il sera similaire dans CodeIgniter. J'utilise aussi SimpleTest (mais avec mon propre wrapper de classe). Je peux ou non modéliser des modèles unitaires et je n'ai jamais mis en place de tests pour les contrôleurs ou les vues; Cela semble trop de travail et trop peu d'avantages. La plupart des cadres «échouent tôt» et les problèmes sont généralement évidents. Mais n'importe quel code de bibliothèque commun rend les cibles plus faciles et les bogues ici - en particulier les bogues logiques - sont plus difficiles à détecter.Configurez vos tests pour vous assurer que les choses fonctionnent comme prévu afin que votre code spécifique à l'infrastructure rencontre quelques problèmes.

4

Si vous êtes encore ouvert avec suggestion à un autre test unitaire pour CodeIgniter, je vous suggère d'essayer Toast. Je l'ai trouvé facile à utiliser, et ne pas interférer beaucoup avec mon processus de développement. Je n'utilise que le test unitaire pour tester ma bibliothèque, mon assistant et mon modèle. Mon contrôleur n'a pas beaucoup de code, seulement obtenir le paramètre post et uri, l'assainir en utilisant trim ou intval, le passer à la bibliothèque ou au modèle, puis passer le résultat à l'affichage.

Afficher presque aucun code à tester, car il affiche tout au navigateur. Surtout, il suffit de déboguer css et js.

Le modèle doit presque toujours être testé, car il traite des données. Sans test unitaire, j'ai trouvé difficile de tracer un bug, surtout avec un calcul complexe.

La bibliothèque et l'assistant effectuent une tâche répétitive. Il est donc nécessaire de procéder à un test unitaire pour s'assurer que la logique qui s'y trouve fonctionne correctement.

J'espère que cette aide.