database - usa - where to find data




Comment tester le code Web? (7)

J'ai exactement le même problème avec mon travail et je trouve que la meilleure idée est d'avoir un script PHP pour recréer la base de données et ensuite un script séparé où je jette des données folles pour voir si ça casse.

Je n'ai jamais utilisé de tests unitaires ou autres, donc je ne peux pas dire si cela fonctionne ou non.

Est-ce que quelqu'un a quelques bons conseils pour écrire le code de test pour le développement de base de données backend où il y a une forte dépendance à l'état?

Spécifiquement, je veux écrire des tests pour le code qui récupère des enregistrements de la base de données, mais les réponses dépendront des données dans la base de données (qui peuvent changer avec le temps).

Est-ce que les gens font généralement un système de développement séparé avec une base de données «gelée» de sorte qu'une fonction donnée doit toujours renvoyer exactement le même ensemble de résultats?

Je suis tout à fait sûr que ce n'est pas une question nouvelle, donc je serais très intéressé d'apprendre de l'expérience des autres.

Y a-t-il de bons articles qui traitent de cette question du développement en ligne en général?

J'écris habituellement du code PHP, mais je m'attendrais à ce que tous ces problèmes soient en grande partie agnostiques en termes de langage et de framework.


Si vous pouvez configurer la base de données avec une quantité connue avant d'exécuter les tests et de les supprimer à la fin, vous saurez quelles sont les données avec lesquelles vous travaillez.

Ensuite, vous pouvez utiliser quelque chose comme Selenium pour tester facilement à partir de votre interface utilisateur (en supposant que le web est basé ici, mais il y a beaucoup d'outils de test pour les autres interfaces) et détecter la présence de certains enregistrements retirés de la base de données.

Cela vaut vraiment la peine de configurer une version de test de la base de données - ou de faire en sorte que vos scripts de test peuplent la base de données avec des données connues dans le cadre des tests.


Je suppose que cela dépend de la base de données que vous utilisez, mais Red Gate (www.red-gate.com) crée un outil appelé SQL Data Generator. Cela peut être configuré pour remplir votre base de données avec des données de test à l'apparence raisonnable. Vous pouvez également lui dire d'utiliser toujours la même graine dans son générateur de nombres aléatoires afin que vos données 'aléatoires' soient les mêmes à chaque fois.

Vous pouvez ensuite écrire vos tests unitaires pour utiliser ces données fiables et reproductibles.

Pour ce qui est de tester le côté web des choses, je suis en train de chercher dans Selenium (selenium.openqa.org). Cela semble être une suite de tests compatible avec tous les navigateurs, qui vous aidera à tester les fonctionnalités. Cependant, comme avec tous ces outils de test de site Web, il n'y a aucun moyen réel de tester à quoi ces choses ressemblent dans tous les navigateurs sans jeter un œil humain sur eux!


Si vous êtes principalement concerné par les tests de couche de données, vous pouvez consulter ce livre: xUnit Test Patterns: Refactoring Test Code . J'étais toujours incertain à ce sujet, mais ce livre fait un excellent travail pour aider à énumérer les préoccupations telles que la performance, la reproductibilité, etc.


Voici ma stratégie (j'utilise JUnit, mais je suis sûr qu'il existe un moyen de faire l'équivalent en PHP):

J'ai une méthode qui s'exécute avant tous les tests unitaires pour une classe DAO spécifique. Il met la base de données dev dans un état connu (ajoute toutes les données de test, etc.). Comme je cours des tests, je garde la trace de toutes les données ajoutées à l'état connu. Ces données sont nettoyées à la fin de chaque test. Une fois que tous les tests de la classe ont été exécutés, une autre méthode supprime toutes les données de test dans la base de données de développement, la laissant dans l'état où elle se trouvait avant l'exécution des tests. C'est un peu de travail pour faire tout cela, mais j'écris habituellement les méthodes dans une classe DBTestCommon où toutes mes classes de test DAO peuvent y accéder.


Je proposerais d'utiliser trois bases de données. Une base de données de production, une base de données de développement (remplie avec des données significatives pour chaque développeur) et une base de données de test (avec des tables vides et peut-être quelques lignes qui sont toujours nécessaires).

Un moyen de tester le code de la base de données est:

  1. Insérer quelques lignes (en utilisant SQL) pour initialiser l'état
  2. Exécutez la fonction que vous voulez tester
  3. Comparer prévu avec les résultats réels. Ici, vous pouvez utiliser votre cadre de test unitaire normal
  4. Nettoyez les lignes qui ont été modifiées (afin que la prochaine exécution ne voit pas la course précédente)

Le nettoyage peut être effectué de manière standard (bien sûr, uniquement dans la base de données de test) avec la DELETE * FROM table .


Nous utilisons une base de données en mémoire (hsql: http://hsqldb.org/ ). Hibernate ( http://www.hibernate.org/ ) nous permet de pointer facilement nos tests unitaires à la db testing, avec en plus le bonus qu'ils courent aussi vite que la foudre.





testing