database usa Comment tester le code Web?




where to find data (8)

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 .

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.


En général, je suis d'accord avec Peter, mais pour créer et supprimer des données de test, je n'utiliserais pas directement SQL. Je préfère utiliser une API CRUD qui est utilisée dans le produit pour créer des données aussi similaires à la production que possible ...


Vous devriez regarder dans DBUnit, ou essayer de trouver un équivalent PHP (il doit y en avoir un là-bas). Vous pouvez l'utiliser pour préparer la base de données avec un ensemble spécifique de données qui représente vos données de test, et ainsi chaque test ne dépendra plus de la base de données et de l'état existant. De cette façon, chaque test est autonome et ne se casse pas pendant l'utilisation de la base de données.

Mise à jour: Une recherche rapide sur google a montré une extension d'unité de base de données pour PHPUnit.


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.


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.


Vous pouvez essayer http://selenium.openqa.org/ il s'agit plus d'un test d'interface graphique que d'une application de test de couche de données, mais il enregistre vos actions qui peuvent ensuite être lues pour automatiser les tests sur différentes plates-formes.


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.


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!





testing