2009-06-30 6 views
5

Notre application a une couche de service et une couche DAO, écrites en tant que beans Spring.Cas de test: Base de données de simulation utilisant des haricots de printemps

Lors du test du Service Couche- Je ne veux pas dépendre d'une véritable base de données, donc je suis moquais que par la création d'un Impl « Mock » pour la couche DAO

Alors, quand je teste le service de la I enchaînez les beans de la couche Service sur les beans DAO Mock Et dans Production - enchaînera la couche Service aux 'vrais' DAO beans

Est-ce une bonne idée? Toute autre suggestion sur la façon de se moquer de la couche de base de données? Clarification: Cette question concerne le test de la couche Service et non de la couche DAO. Lors du test de la couche de service, je suppose que la couche DAO a déjà été testée ou n'a pas besoin d'être testée. La principale chose est - comment tester la couche de service - sans être dépendant de l'implémentation DAO - donc je me moque de la couche DAO

Répondre

5

C'est une technique que nous utilisons depuis de nombreuses années maintenant. Notez que quand il vient à se moquer des interfaces DAO vous avez des choix:

  • Créer des instances simulacres comme vraies classes Java
  • Utilisez un cadre moqueur dynamique tel que jMock (ma préférence) ou
  • EasyMock

Les frameworks de simulation dynamique vous permettent d'éliminer une variété de circonstances (aucune donnée, 1 ligne, plusieurs lignes, lancer d'exception) sans avoir à créer des classes complexes pour remplacer le comportement que vous souhaitez tester

1

C'est une excellente façon d'utiliser la simulation pour tester la base de données. Je ne pense pas qu'une suggestion alternative soit nécessaire; Je pense que tu as déjà la bonne technique!

1

Vous êtes définitivement sur la bonne voie.

Mon cadre moqueur de choix est Mockito

0

Si je comprends bien la question, il est explicitement dédié aux meilleures pratiques en ce qui concerne les couches de DAO de test, comme se moquant d'une base de données semble nnot si simple que se moquant de la couche DAO lors du test de services.

Personnellement, je soulèverais la question s'il est raisonnable de tester réellement une couche DAO dans le sens de test unitaire classique. Si vous concevez votre couche DAO correctement, elle ne fait pas beaucoup plus que de mapper des objets de domaine aux requêtes. Cela dit, je propose toujours d'utiliser une base de données intégrée comme H2, HSQL ou le Java 6 embarqué Derby pour faire des choses comme ça se moquer d'une source de données est vraiment beaucoup plus d'efforts que de simplement élever une base de données intégrée. Spring 3 fournira un bon modèle de générateur pour créer de telles bases de données à la volée. RC1 va également introduire un espace de noms jdbc pour faciliter la configuration. Voir this one pour plus de détails.

Mais même avec la branche Spring 2.5 actuelle utilisant une base de données intégrée, il suffit de prendre les bases de données JAR et de configurer un DataSource en conséquence.

+0

Voir la clarification ajoutée à la question. Merci –

Questions connexes