Tests unitaires avec Entity Framework
Je veux tester mon Entités qui sont construits à l'aide de Entity Framework.
Mon souci est que l'utilisation d'Entity Framework moyens, travaillant directement avec la source de données.
Ainsi, toutes les idées comment les tests unitaires, Entity Framework de composants à base de?
Vous devez vous connecter pour publier un commentaire.
Pour Enity Framework 4, ça a l'air prometteur: La testabilité et Entity Framework 4.0
Apparemment, c'est très dur. L'éloquence de mettre par Erik ici - TDD et ADO.NET Entity Framework
Un bon marché de l'approche est de mettre en place un fichier de base de données avec la même structure que votre base de données et l'ensemble de la chaîne de connexion dans votre unité de test de config à point à qui. La base de données n'a pas besoin d'avoir tous les tableaux que le réel a; seulement ceux que le test de l'unité besoins.
Un inconvénient est que vous devrez gérer l'état de la base de données de sorte que les tests unitaires ne touchent pas les uns les autres ou eux-mêmes, pendant et entre les cycles.
Je sais que cette approche fonctionne quand à la fois le réel et le test unitaire DBs utiliser SQL Express, mais je ne sais pas à propos de buter dans un SqlExpress DB pour SQL complète DB.
Je réalise que c'est techniquement les tests d'intégration, mais il pourrait être moins cher que la refactorisation de votre code ou de l'apprentissage d'une infrastructure factices.
Exemple réel de la chaîne de connexion:
Exemple les tests unitaires de la chaîne de connexion:
Vous allez vouloir utiliser un Moqueur Cadre de récupération de se moquer de valeurs plutôt que de frapper les données réelles. Voici une liste de quelques moqueries des cadres et des liens vers des screencasts pour vous aider à démarrer:
Rhino Se Moque De
Moq
Voici quelques vidéos explicatives sur la façon de commencer:
Moq
Je voudrais partager une autre entrée de cette. J'ai pu tester Entity Framework de composants et d'applications à l'aide de TypeMock Isolateur ainsi. Cependant, il est commercial.
Avoir un oeil sur ce post:
Introduction à Entity Framework de Tests Unitaires avec TypeMock Isolateur
En raison du fait que la version 1 de l'Entité Cadre des pauses de quelques grands logiciels de principes de conception, il n'y a vraiment pas moyen d'appliquer TDD lorsque vous l'utilisez dans votre application. Ma recherche de points de NHibernate si vous êtes à la recherche d'une solution immédiate. Il a été conçu avec les tests unitaires dans l'esprit.
Toutefois, si vous pouvez attendre, il semble y avoir de l'espoir pour la prochaine version de l'Entity Framework:
Développement Piloté par les tests Procédure pas à pas avec Entity Framework 4.0
Bien que les exemples pourraient être très simpliste, j'ai tenté de discuter d'une éventuelle solution à ce problème. Il implique une séparation des préoccupations et de notre cher ami l'Injection de Dépendance.
http://devblog.petrellyn.com/
Me contacter si vous voulez plus de détails.
Je suis d'accord, un moqueur cadre est ce que vous êtes après. Vous créez "moqué" les objets qui ne sont pas récupérés à partir de votre source de données, et vous testez les données de cet objet. Personnellement, j'ai travaillé avec Moq, et je l'aime--il y a aussi Rhinomocks, ainsi que d'autres.
Après beaucoup de frustration avec ce que j'ai enfin une solution que je suis heureux avec au moins une partie du problème.
De la première utilisation d'un référentiel d'interface quelque chose comme:
qui nous permet de retourner une mémoire de collection ou d'un réel DB soutenu collection. Prochaine encapsuler vos requêtes dans un objet de requête avec une interface qui ressemble à quelque chose comme ça.
Maintenant diviser vos tests unitaires en 2 groupes. Le premier groupe test que vos requêtes sont valides. ce faire comme suit:
La deuxième série de tests unitaires peut librement tester votre logique métier sans se soucier de la SQL étape de compilation qui est, de loin, où l'on croise le plus de problèmes.
Son n'est pas parfait par un effort de l'imagination, les déclencheurs sont évidemment ne va pas être exécuté, DB mis en œuvre les contraintes peuvent être violés, et quelques problèmes avec le contexte de base de données et de sortir de synchronisation peuvent surgir. Ainsi, alors que la fin à la fin des tests d'intégration sont encore nécessaires, il est possible de saisir ce qui est de l'OMI, le problème le plus commun de la récolte jusqu'au moment de l'exécution dans de simples tests unitaires.
La BookLibrary exemple d'application de la WPF Cadre applicatif (WAF) projet montre comment une Entité Cadre de l'application peuvent être l'objet de tests unitaires.
Voici une agrégation de l'unité de travail schéma+ base de données en mémoire + t4 de génération de code pour générer automatiquement un faux EF dbContext.
http://mockingcompetence.wordpress.com/2013/05/20/fakingefdatacontext/
il y a quelques questions(non valide linq to EF requêtes et pas de FK application de la loi) avec exactement la réplication d'un réel EF db connexion en ce moment.
Cependant, en ayant en mémoire le contexte rapidement exécuter des tests unitaires est presque indispensable pour pouvoir faire du TDD ou tout autre type de tests unitaires approche centrée sur l'.
Je vais poster des mises à jour du lien ci-dessus que je figure sur plus de problèmes.
Vous pouvez utiliser dans la mémoire de la base de données pour tester votre modèle d'Entity Framework.
Regarder ici pour plus de détails
Comment sur l'utilisation d'une infrastructure factices?
Il me semble qu'un moqueur peut vous aider à isolaye une logique d'entreprise à partir de la base de données.