2009-04-29 13 views
5

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?

+1

http://stackoverflow.com/questions/570451/how-to-best-do-unit-testing-for-a-web-application –

Répondre

2

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.

0

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.

0

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) =)

3

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.

+0

oups, merci de corriger la faute de frappe – thomasrutter