Question

J'utilise un générateur de code (modèle CodeSmith avec .NetTiers) pour générer tout le code DAL. J'écris des tests unitaires pour mon code (couche métier) et ces tests sont de plus en plus lents à s'exécuter. Le problème est que pour chaque test, je réinitialise la base de données pour qu’elle soit en état de nettoyage. De plus, comme je fais beaucoup de tests, il semble que la latence des opérations de la base de données représente un retard assez important.

Toutes les opérations de base de données sont effectuées via une classe DataRepository générée par .NetTiers. Savez-vous s’il existe un moyen de générer (ou de me coder moi-même) un modèle de DataRepository qui utiliserait le stockage en mémoire au lieu d’utiliser la base de données?

De cette façon, je pourrais utiliser ce référentiel fictif dans mes tests unitaires, en accélérant beaucoup, sans changer réellement mon code actuel!

Était-ce utile?

La solution

Jetez un coup d'œil à l'injection de dépendance (DI) et au conteneur d'inversion de contrôle (IOC). Pour l'essentiel, vous allez créer une interface qu'un nouvel objet de base de données factice peut implémenter, puis l'infrastructure DI injectera votre base de données factice lors de l'exécution de tests et la base de données réelle lors de l'exécution de votre application.

Il existe de nombreuses bibliothèques gratuites et à code source ouvert que vous pouvez utiliser pour vous aider. Puisque vous êtes en C #, l’une des bibliothèques existantes et à venir est Ninject . Il y en a beaucoup d'autres aussi. Découvrez cet article de Wikipedia pour les autres et une description détaillée.

Autres conseils

D'après la description du problème, je pense que vous effectuez le test d'intégration car votre test utilise les bases de données Business, DAL et Live.

Pour les tests unitaires, vous gérez une couche de code avec toutes les autres dépendances, qu'elles soient fictives ou écrites. Avec cette approche, vos tests unitaires seront très rapides à exécuter à chaque changement de code incrémentiel.

Vous pouvez utiliser divers frameworks moqueurs tels que Rhino Mock, Moq, Typemock, pour en nommer quelques-uns. (Dans mon projet, je me sers de Rhino pour simuler la couche DAL et la couche d’affaires de test unitaire en isolation)

Harsha

Certains de nos tests unitaires utilisent des données extraites du XML générées à partir d'une base de données pour simuler un accès base de données. Les classes DAL sont remplacées par des classes fictives car elles sont toutes stockées dans un conteneur DI.

La génération du code XML est un code personnalisé. Si vous trouvez une solution open source pour cela, je suis heureux de l'entendre.

Modifier après la réponse de Stefan: Je me souviens d'une autre équipe utilisant SQL CE pour sa base de données de tests

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