Comment se moquer d'ObjectContext ou d'ObjectQuery dans Entity Framework?

.net-3.5 entity-framework mocking unit-testing

Question

Comment se moquer d'ObjectContext ou ObjectQuery dans Entity Framework?

Réponse populaire

Les frameworks mocking de base ne peuvent créer des simulacres que pour les interfaces et les classes abstraites (mais uniquement pour les méthodes abstraites / virtuelles).

Comme ObjectContext n'est ni abstrait ni interface, il n'est pas si facile de s'en moquer. Cependant, comme le conteneur de modèle concret est généré en tant que classe partielle (si vous utilisez le concepteur), vous pouvez en extraire les méthodes / propriétés dont vous avez besoin vers une interface. Dans votre code, vous ne pouvez utiliser que l'interface, que vous pourrez ensuite simuler.

Avec ObjectQuery, c'est un peu plus facile, car il dispose d'une interface de base (par exemple, IQueryable) qui contient en gros toutes les opérations nécessaires dont vous avez généralement besoin (et requises pour LINQ). Vous devez donc exposer IQueryable au lieu d’ObjectQuery dans votre logique métier et créer une maquette pour cette interface.

Une autre solution consiste à masquer toute la logique liée à l'accès aux données dans une couche séparée (avec une logique minimale), à tester cette couche avec des tests d'intégration et à la simuler pour pouvoir effectuer des tests unitaires sur les autres couches.

Il existe des outils (je ne connais que TypeMock ) qui utilisent les crochets de profilage de .NET pour générer les simulacres. Ces outils ne se limitent pas aux interfaces factices ou aux classes abstraites, mais avec elles, vous pouvez simuler n'importe quoi, y compris les méthodes non virtuelles et statiques. Avec un tel outil, vous n'avez pas besoin de changer votre logique métier pour vous permettre de vous moquer.

Bien que cette approche soit parfois utile, vous devez savoir que l'extraction des dépendances aux interfaces (IoC) est non seulement utile pour le mocking, mais réduit également les dépendances entre vos composants, ce qui présente également d'autres avantages.

Personnellement, j'aime bien Rhino.Mocks propose le meilleur des outils gratuits, mais nous utilisons également TypeMock , qui est également un excellent produit (mais vous devez payer pour cela).



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi