Je pensais écrire des tests unitaires pour mes projets PHP/MySQL. Ce qui me dérange, c'est comment je peux tester des choses comme la validation de formulaire, les fonctions ajax et les fonctionnalités de l'interface utilisateur (comme cliquer sur des liens). De plus, je ne veux pas que les tests dépendent d'un aspect de l'interface utilisateur. Par conséquent, si je déplaçais un lien, tous les tests seraient interrompus. Est-ce que quelqu'un a des idées/suggestions sur les parties du code que je devrais tester, combien de temps devrait-on passer sur les tests unitaires, et d'autres suggestions/conseils?Tests unitaires en PHP?
Répondre
Les tests unitaires, au moins du point de vue du développement d'applications Web, ne peuvent pas vraiment couvrir la conception de l'interface utilisateur. Quels tests unitaires peut vous aider à tester l'entrée/la sortie de toutes vos méthodes de contrôleur et/ou de toutes les fonctions singleton/globales que vous avez. Donc, si vous voulez obtenir une couverture de test unitaire sur votre validation de formulaire, assurez-vous que votre application est structurée de telle sorte que vous puissiez tester votre fonction de validation indépendamment de l'interface utilisateur.
class SomeController extends ... {
... function isAPhoneNumber($string){
if(...) {
return true;
}
else (...) {
return false;
}
}
}
Ceci laisse tout le code qui obtient votre valeur à cette méthode non testée.Le seul moyen efficace que j'ai vu de tester cela est de tester l'interface utilisateur directement avec les télécommandes du navigateur comme Selenium. Le PHPUnit testing framework a des hooks pour utiliser le pilote PHP de Selenium, ce qui signifie que vous pouvez utiliser le même lanceur de test que vos autres tests unitaires.
Vous ne serez jamais assuré à 100% qu'un changement innocent n'aggravera pas vos tests sélénium, mais il y a des mesures que vous pouvez prendre pendant le développement pour minimiser cela. Selenium a various different ways pour "cibler" un élément sur lequel il cliquera ou tapera. Vous voulez utiliser un ciblage aussi spécifique que possible, alors essayez de donner à tous vos nœuds (X) HTML un élément d'ID unique. Cela garantit que le sélénium cliquera sur un lien, peu importe où il se termine sur une page. Lorsqu'un identifiant unique n'est pas possible, essayez d'envelopper les éléments communs avec un élément HTML qui a un identifiant unique, puis utilisez les capacités de tarage xpath de selenium pour dire "cliquez sur le lien qui contient le texte" d'inscription "qui est dans le div avec l'id de « foo », ou cliquez sur le troisième lien dans la div avec l'id de « toto ».
Si ce n'est pas évident à partir des éléments ci-dessus, ne le font pas comptent sur les choix de ciblage Selenium IDE (ou d'autres enregistreurs) choisira.L'objectif est de s'assurer que l'exécution du test sur cette page exacte vous donnera les mêmes résultats, ce qui peut vous donner xpath très fragile.Réexaminez toujours les tests que vous enregistrez et corrigez le ciblage de mauvaise qualité.
Il n'y a pas de réponses faciles ici. Si c'était le cas, les applications web seraient beaucoup moins buggées.
Essayez SeleniumHQ.org.
Ceci est une extension du navigateur qui vous permet d'enregistrer des clics, des mouvements de frappe et de souris, etc., comme une macro. Les macros peuvent être sauvegardées en tant que tests et relues, afin de tester des applications Web.
On dirait qu'ils ont aussi d'autres versions du produit qui peuvent effectuer des tests en lançant d'autres navigateurs.
Je ne sais pas si ma réponse sera utile, parce que j'ai aussi la même question.
De toute façon, si vous ne l'avez pas encore fait, essayez Windmill, que je trouve très utile, rapide et sale et fonctionne dans les principaux navigateurs.
Modification d'un lien ne change pas le test (dans la plupart des cas, je pense) =)
Vous devez feuilletez cette partie du documentation of SimpleTest et regarder les méthodes qu'ils ont pour les tests
- contenu de la page
- navigation
- les cookies
- images
- cadres
- soumission du formulaire
- redirige
- procurations
Même si vous ne finissent pas à l'aide SimpleTest, il vaut peut-être regarder.
Pour moi, la chose la plus utile est de tester les soumissions de formulaires, y compris chaque paramètre dans une demande GET ou POST pour chaque formulaire qui est nécessaire pour le fonctionnement de votre site. Que vous souhaitiez tester une grande partie de votre interface utilisateur ou simplement de petites zones clés, c'est à vous de décider.
oups, merci de corriger la faute de frappe – thomasrutter
- 1. Débogueur PHP avec tests unitaires
- 2. Tests unitaires en Python
- 3. Tests unitaires en flex
- 4. Tests unitaires NHibernate UserTypes
- 5. ResourceManager et tests unitaires
- 6. Thoughtworks Cruise: Tests unitaires?
- 7. Tests unitaires InstallScript
- 8. Tests unitaires WPF UserControls
- 9. Tests unitaires écrasa Méthode
- 10. Tests unitaires pour Boost.Spirit
- 11. Tests unitaires SiteMapNode
- 12. Héritage des tests unitaires
- 13. Tests unitaires Visual Studio
- 14. Tests unitaires Modèle Couchdb en pylônes
- 15. Tests unitaires JSP en mode intégré
- 16. Contrôle PHP et source: où placer les tests unitaires, etc?
- 17. RedirectToReferrer de tests unitaires Monorail()
- 18. Tests unitaires dans Xcode 3.1
- 19. Tests unitaires et clés primaires
- 20. Tests unitaires avec plusieurs collaborateurs
- 21. Dispositif "Echo" pour tests unitaires
- 22. Tests unitaires des packages DTS
- 23. Tests unitaires Interface utilisateur Cocoa
- 24. Tests unitaires Redirection ASP.NET MVC
- 25. Tests unitaires IList avec CollectionAssert
- 26. tests unitaires avec vérifie simulacres
- 27. Tests unitaires avec nez: tests au moment de la compilation?
- 28. De bonnes ressources sur les tests unitaires?
- 29. Comment écrire des tests unitaires en PHP avec une base de code procédurale?
- 30. Mocking and DetachedCriteria dans les tests unitaires
http://stackoverflow.com/questions/570451/how-to-best-do-unit-testing-for-a-web-application –