Question

J'ai entendu dire que lorsque l'application de développement qui utilise une base de données que vous devez faire des tests unitaires de base de données. Quelles sont les meilleures pratiques dans les tests unitaires de base de données? Quelles sont les principales préoccupations lorsque vous faites des tests unitaires db et comment le faire « droit »?

Était-ce utile?

La solution

  

Quelles sont les meilleures pratiques dans les tests unitaires de base de données?

Le cadre DbUnit (un framework de test permettant de mettre une base de données dans un état de connaître et d'effectuer l'affirmation contre son contenu) a une base de données recensant la page test meilleures pratiques qui, à mon expérience, sont vraies.

  

Quelles sont les principales préoccupations lorsque vous faites des tests unitaires db

  • Création d'un schéma à ce jour, la gestion de schéma change
  • Configuration des données (données de référence, les données de test) et maintenant données de test
  • Tenue de tests indépendants
  • Permettre aux développeurs de travailler simultanément
  • Vitesse (tests impliquant la base de données sont généralement plus lents et feront prendre plus de temps toute votre construction)
  

et comment le faire "droit"?

a laissé entendre, suivre les bonnes pratiques connues et utiliser les outils / cadres dédiés:

  • Je préfère dans la base de données de la mémoire si possible (pour la vitesse)
  • Utilisez un schéma par développeur est un must (pour permettre le travail simultané)
  • Utilisez un outil « migration base de données » (à la RoR) pour gérer les changements de schéma et mettre à jour un schéma vers la version finale
  • Construire ou utiliser un harnais de test permettant de mettre la base de données dans un état connu avant chaque essai et d'effectuer affirme contre les données après l'exécution (ou pour exécuter des tests dans une transaction que vous rollback à la fin de l'essai).

Autres conseils

Une liste des éléments qui devraient être examinés et pris en compte lors regardant avec l'unité de base de données test

  • Chaque testeur a besoin d'une base de données séparée, afin d'éviter d'interférer avec d'autres activités testeur / développeur
  • Pour avoir un moyen facile de créer une base de données à tester (ce qui est lié à avoir une base de données SQL Server sous contrôle de version). Cela est particulièrement utile lorsque vous essayez de trouver ce qui a mal tourné si certains tests échouent
  • Mise au point sur des domaines spécifiques et la création de tests pour un seul module au lieu de couvrir à la fois. Ajout de tests est granulairement un bon moyen d'être efficace
  • Assurez-vous de fournir autant de détails que possible lorsqu'un test échoue, pour permettre un débogage plus facile
  • Utilisez l'une et les mêmes données de test pour tous les tests

Si le test est mis en œuvre en utilisant le cadre tSQLt, le processus de tests unitaires pourrait être compliqué en traitant avec beaucoup de bases de données de plusieurs instances SQL Server. Afin de maintenir, exécuter et gérer des tests unitaires directement à partir de SQL Server Management Studio, ApexSQL Unité de test de la boîte être utilisé comme une solution

Jetez un oeil à ce lien . Il va sur quelques-unes des bases pour la création de tests unitaires stockés dans SQL procs serveur, ainsi que les différents types de tests unitaires et quand vous devriez les utiliser. Je ne sais pas ce que vous utilisez SGBD, mais de toute évidence cet article est orienté vers SQL Server.

Stolen de l'article:

  

Tests de fonction

     

La première et probablement la plus répandue   classe de test unitaire de base de données est un   test de fonctionnalité. Dans mon esprit, fonction   essais tester les fonctionnalités de base API-ou,   si vous voulez-de votre base de données de la   base de données du point de vue du consommateur.   Test de programmabilité d'une base de données   objets est le scénario de ligne principale ici.   Donc, tester toutes les procédures stockées,   fonctions et déclencheurs dans votre   base de données constituent des tests de fonctionnalité dans   mon esprit. Pour tester une procédure stockée,   vous exécutez la procédure stockée   et vérifier que soit le prévu   les résultats ont été renvoyés ou   un comportement approprié a eu lieu.   Cependant, vous pouvez tester plus que   ces types d'objets. Vous pouvez   Imaginez vouloir veiller à ce que une vue,   par exemple, le retour approprié   calcul à partir d'une colonne calculée. Comme   vous pouvez le voir, les possibilités dans ce   domaine sont grandes.

     

Tests de schéma

     

L'un des aspects les plus critiques d'un   base de données est son schéma et à tester   veiller à ce qu'il se comporte comme attendu est   une autre classe importante base de données   tests unitaires. Ici, vous voulez souvent   pour faire en sorte que la vue retourne   ATTENDUS ensemble de colonnes du   type de données approprié dans le   ordre approprié. Tu pourrais vouloir   assurez-vous que votre base de données ne, en   fait, contiennent les 1000 tableaux qui   vous attendez.

     

Tests de sécurité

     

Dans la journée d'aujourd'hui et l'âge, la sécurité   des données qui sont stockées au sein de la   base de données est essentielle. Ainsi, une autre   classe importante de tests unitaires de base de données   sont ceux qui essai la base de données   Sécurité. Ici, vous voulez   veiller à ce que les utilisateurs particuliers existent dans   votre base de données et qu'ils sont   attribué les autorisations appropriées.   Vous voulez souvent créer négatif   des tests qui tentent de récupérer des données   des tables ou vues restreintes et   veiller à ce que l'accès est   de manière appropriée refusée.

     

Tests d'actions de données

     

De nombreuses bases de données contiennent des données d'achat d'actions, ou   les données de semences. Cette modification des données   rarement et est souvent utilisé comme   rechercher les données pour les applications ou fin   utilisateurs. ZIP codes et leurs associés   Les villes et les états sont de grands exemples   de ce genre de données. Il est donc   utile pour créer des tests pour faire en sorte que   vos données de stock ne, en fait, existe   dans votre base de données.

Je suis content que vous posiez de tests unitaires, et non le test en général.

Les bases de données ont de nombreuses caractéristiques qui doivent être testées. Voici quelques exemples:

  • Types / Taille / jeux de caractères de données (essayez d'insérer un nom suédois, ou de longues urls ou des numéros des mondes réels, et voir si vos définitions de colonnes sont ok)
  • Triggers
  • Contraints (clés étrangères, unicité ...)
  • Vues (vérifier que les données sont inclus / exclus / transformé correctement)
  • Procédures stockées
  • UDFs
  • Permissions
  • ...

Ceci est utile non seulement lorsque vous changez quelque chose dans votre base de données, mais aussi lorsque vous mettez à niveau votre SGBD ou changer quelque chose dans vos paramètres.

En général, les essais d'intégration se fait. Cela signifie qu'une suite de tests dans un langage de programmation comme PHP ou Java est créé, et les tests émettent des requêtes. Mais si quelque chose tombe en panne, ou il y a quelques exceptions près, il est plus difficile de comprendre le problème, pour 2 raisons:

  • Le problème pourrait être dans votre code PHP, ou dans la configuration PHP, ou dans le réseau, ou ...
  • Les instructions SQL sont plus difficiles à lire et à modifier, si elles sont intégrées dans un autre langage de programmation.

Alors, à mon avis, des bases de données complexes, vous devez utiliser un cadre de test unitaire qui est écrit dans SQL (en utilisant des procédures stockées et tables). Vous devez choisir soigneusement, parce que ce genre d'outils est pas largement utilisé (et donc pas largement testé). Par exemple, si vous utilisez MySQL Je sais que ces outils:

J'utilise JUnit / nunit / etc et le code des tests unitaires de base de données avec java ou c #. Ceux-ci peuvent alors fonctionner sur un serveur d'intégration en utilisant peut-être un schéma distinct à la base de données de test.

Le dernier développeur sql oracle est livré avec construit dans le cadre de tests unitaires. J'ai eu un coup d'oeil dans ce mais je pas utiliser. Il utilise une interface graphique pour créer et exécuter des tests et stocke tous les tests de la base de données afin de ne pas si facile de mettre des cas de test sous contrôle de version. Il y a probablement d'autres cadres d'essai là-bas je pense qu'ils pourraient être spécifiques à votre base de données.

Les bonnes pratiques sont similaires à des tests unitaires réguliers:

  • mettre les essais sous contrôle source
  • faire des tests qui fonctionnent rapidement - ne pas tester trop à la fois
  • vos tests reproductible

Jetez un oeil sur le cadre DBTestDriven. Il fonctionne très bien pour nous. Téléchargez-le sur GitHub ou leur site web.

En ce qui concerne le développement JVM, les tests unitaires peuvent bénéficier de l'abstraction JDBC. Dès que vous savez que les données JDBC sont soulevées par l'accès DB, ces données JDBC peuvent être « rejoué »

Ainsi cas d'accès DB peut être « reproduit » pour les tests, sans la cible DB:. Pas de test / données complexité d'isolement, faciliter l'intégration continue

Mon cadre Acolyte est un cadre utile de cette façon (y compris l'outil GUI studio « enregistrement » résultat DB): https://github.com/cchantep/acolyte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top