10
votes

Comment remplir une application Web avec des données initiales

J'écris une application Web et je vous demande quelle manière la méthode recommandée est de remplir les données initiales. C'est une application JPA / Hibernate et Printemps et est construite par Maven. Jusqu'à présent, j'ai utilisé un script qui remplit la base de données avec des données initiales, démarrées à la main.

Les tests unitaires fonctionnent avec leurs propres données, créées dans le code avant chaque test. Mes cours de test s'étend org.springframework.test.jpa.abstractJpAtest .

Enfin, j'aimerais avoir une construction Maven qui crée des entités de formulaire de base de données (maintenant, je dois exécuter la première application pour créer une base de données, puis exécuter un script) puis la population de données initiales / dictionnaires et exécuter des tests d'unité et d'intégration. Ce processus devrait être entièrement automatisé pour mettre cette version dans CI Server (Hudson), créer une nouvelle base de données à partir de zéro.

Exigence supplémentaire: la solution agnostique de la base de données sera la plus précieuse.

EDIT: meilleur exemple de ce que je recherche est Fermeture init dans Bootstrap.Groovy .


0 commentaires

3 Réponses :


6
votes

Modifier : Ajout d'un lien vers un article de blog montrant comment tester Hibernate JPA avec Spring and DBunit.

[...] J'aimerais avoir une construction Maven qui crée une base de données d'entités

Il y a un Maven Hibernate3 Plugin avec un Hibernate3: HBM2DDL objectif qui pourrait aider. Couplé avec le Plugin Maven SQL , il devrait être possible de créer ce schéma de la Généré DDL.

[...] remplit ensuite les données initiales / dictionnaires

Encore une fois, le plugin Maven SQL pourrait faire le travail ici. Ou peut-être avec dbunit qui est une autre solution élégante (voir le Maven Dbunit Plugin ).

et exécuter des tests d'unité et d'intégration.

Eh bien, je ne suis pas sûr que vos tests de l'unité doivent accéder à la base de données, mais pour les tests d'intégration, check dbunit comme je l'ai dit. C'est vraiment un très bel outil qui vous permet de configurer la base de données dans un état connu, des tables de test pour le contenu attendu après une exécution de test et de remettre la base de données dans l'état initial. Voir Test JPA Hiberner avec Spring & Dbunit pour un bon exemple.

Ce processus doit être entièrement automatisé pour mettre cette version dans CI Server (Hudson), une nouvelle base de données en caisse à partir de zéro est également appréciée.

Je pense que c'est faisable.


2 commentaires

J'envisage d'utiliser Unittils pour mon test de l'unité. Je me demande si il y a un moyen de définir des données initiales dans le fichier script / xml, lisez-les à Java et perturber à l'aide de JPA / Hibernate - de manière agnostique de la base de données.


Vérifiez dbunit, c'est ce que vous recherchez, sauf que ce n'est pas basé sur JPA. DBUnit et son API vous permettent de définir des données initiales et attendues dans XML / CSV, de les charger des tests d'unités, pour effectuer une affirmation sur le contenu de la table, pour restaurer la base de données dans l'état initial. Et il y a une intégration entre Dbunit et Unittils (voir Unitils.org/ APIDOCS / ORG / UnITILS / DBUNIT / Package-Sommaire.HTML )



0
votes

J'ai résolu un problème presque identique au vôtre en étendant

org.springframework.test.context.junit4.AbstractTransAdtionAntests

alors j'ai utilisé le plug-in hibernate3-maven Pour remplir la base de données (j'ai utilisé hsqldb) au moment de l'essai: xxx

J'ai posté un Projet Maven Simple au code de Google pour démontrer la technique.


1 commentaires

Je n'ai aucune raison technique de ne pas utiliser dBunit. Je ne l'ai tout simplement pas utilisé. Je vais y jeter un coup d'œil et mettre à jour mon exemple de projet de manière appropriée. À ce point, j'ai créé des données de test dans le code. Ceci est raisonnable pour un exemple de projet, mais lorsqu'il s'agit de tester le code du monde réel, une solution comme DBUnit sera nécessaire. Merci pour votre suggestion.



1
votes

@David, merci pour votre message. La seule solution raisonnable que j'ai trouvée dans les données initiales de semences est similaire à celle qui insère des données dans des tests. Dans mon code, je n'utilise même pas Hibernate3-maven-plugin. Création de la base de données in Done Par Spring dans le fichier jpacontext.xml xxx

Comme je l'ai écrit, j'utilise org.springframework.test.jpa.abstractJpaTests avec la méthode de la nervation xxx

Je pense qu'il est shold Simplifiez votre solution. Je recherche toujours une meilleure résolution pour la création de données initiales. Créer des objets avec beaucoup de relations à la main est encombrant.


2 commentaires

Des commentaires négatifs sur dbunit (se demandant simplement si vous lisez mes réponses et / ou mes commentaires)?


@Pascal. Pourquoi négatif? :) J'ai lu vos commentaires / réponses. La résolution la plus préservable pour moi est de remédier (je cherche toujours comment) JPA / Hibernate Way. Unittils / Dbunit est une autre bonne option mais la seconde.