Notre application a une couche de service et une couche DAO, écrite comme haricots de printemps. P>
Lors du test de la couche de service, je ne veux pas dépendre d'une base de données réelle, donc je me moque de cela en créant un «simulé» impliquer pour la couche DAO P>
Alors, quand je teste la couche de service, je chaîne les haricots de la couche de service aux haricots mock dao Et en production - chaînera la couche de service aux «vrais» haricots dao p>
est-ce une bonne idée? Toute suggestion alternative sur la façon de se moquer de la couche de base de données? P>
Clarification: Cette question est de tester la couche de 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 de tester. La principale chose est - comment testons-nous la couche de service - sans être dépendante de la mise en œuvre de la DAO- Par conséquent, je me moque de la couche DAO P>
4 Réponses :
C'est un excellent moyen d'utiliser la moqueur pour tester la base de données. Je ne pense pas que toute suggestion alternative est nécessaire; Je pense que vous avez déjà la bonne technique! P>
C'est une technique que nous utilisons depuis de nombreuses années. Notez que lorsqu'il s'agit de moquer des interfaces DAO, vous avez des choix: P>
Les cadres moqueurs dynamiques vous permettent de parcourir une variété de circonstances (pas de données, 1 rangée, de nombreuses lignes, de lancer des exceptions) sans avoir à créer des classes complexes pour encercler le comportement que vous souhaitez tester p>
Vous êtes définitivement sur la bonne voie. P>
Mon cadre moqueur de choix est Mockito P>
Si je comprends bien la question, il est explicitement dédié aux meilleures pratiques concernant les couches DAO, car elles se moquent d'une base de données qui se moquent aussi simple que de moquer de la couche DAO lors du test des services. P>
Personnellement, j'aurais une question de retour si elle est raisonnable de tester réellement une couche DAO dans le sens de test de l'unité classique. Si vous concevez correctement votre couche DAO, elle ne fait pas beaucoup plus que de mapper des objets de domaine sur les requêtes. P>
Cela dit que j'abstine Alway propose d'utiliser une base de données intégrée comme H2, HSQL ou le derby intégré Java 6 pour faire des choses comme celles-ci comme moqueur d'une source de données est vraiment beaucoup plus d'efforts que de simplifier une base de données intégrée. Le printemps 3 fournira à un joli modèle de constructeur pour créer de telles bases de données à la volée. RC1 de celui-ci introduira également un espace de noms mais même avec la branche de printemps 2.5 actuelle à l'aide d'une base de données intégrée, il suffit de prendre les bases de données JAR et de configurer un jdbc code> pour faciliter la configuration. Voir Celui-ci pour plus de détails. P>
DataSource code> en conséquence. P>
Voir Clarification ajoutée à la question. Merci