2008-09-30 7 views
0

J'ai une question à SO demandant comment câbler un niveau intermédiaire à un DataSet.Comment découpler un niveau intermédiaire et un ensemble de données pour permettre les tests unitaires?

J'ai mis en place une réponse montrant ce que j'avais imaginé, mais je ne suis pas satisfait du couplage serré. Je viens juste de commencer à tester et je trouve que c'est un bon objectif pour mon code.

Comment ce code serait-il découplé pour permettre le test unitaire?

Merci,
Keith

Répondre

3

IMO; Les DataSets sont mauvais. Ils sont, et ne devraient être utilisés que comme bases de données hors ligne. Rien de plus, OMI. Toutefois, ce que vous faites dans votre couche d'accès aux données (DAL) ne devrait pas vraiment affecter votre couche d'entreprise (BL). Je voudrais juste utiliser des objets (utiliser des interfaces) entre eux (IList) et ensuite utiliser une interface pour définir votre DAL (IRepository) et le nyou peut se moquer de cette interface pour retourner tout ce dont vous avez besoin dans votre BL pour le test unitaire. Unités de tests unitaires est une autre bête, jamais essayé et j'espère ne jamais avoir à ... Peut-être une base de données en mémoire est votre meilleur pari là-bas ...

Oh, et pour avoir moqué j'ai utilisé RhinoMock avec un certain succès . Je vous encourage également à regarder IoCs (http://www.castleproject.org/).

+0

Je suis d'accord. J'ai actuellement une application qui utilise NHibernate, Castle Windsor et RhinoMock et j'en suis très content. J'utilise le modèle Repository et j'ai un découplage presque total de la DAL pour mes tests unitaires. Je ne voudrais plus jamais retourner aux jeux de données – Tigraine

-2

Si vous avez des objets d'entité, vous pouvez utiliser pour les tests unitaires se moque de votre niveau intermédiaire.

RWendi

0

Avez-vous essayé Spring.net? Cela rendra votre code plus propre et moins couplé. Il fournit également useful classes pour effectuer vos tests d'intégration.

0

Cela dépend de ce que vous voulez tester:

  • Voulez-vous tester la récupération de données à partir de la base de données?
  • Construire les objets à partir des jeux de données?
  • Insère ou met à jour la base de données?
  • Et ainsi de suite ...

Voici une suggestion:

Un ordre contient tous ses enfants. C'est un agrégat, un tout. Vous obtenez une commande avec les détails d'un référentiel:

var order = repository.GetOrderBy(id); 

Le dépôt récupère les données de la base de données:

var dataset = orderDatabase.GetOrderAndDetailsBy(id); 

Le dépôt pourrait utiliser un constructeur pour créer l'ordre:

var order = orderBuilder.CreateOrderAndDetailsFrom(dataset); 

Vous devez créer un référentiel comme suit:

var repository = new OrderRepository(orderDatabase, orderBuilder); 

Maintenant, vous pouvez créer un référentiel avec de faux collaborateurs, en fonction de ce que vous voulez tester.

1

Vous avez besoin d'objets IOC (inversion de contrôle) et de faux objets.

Je vous encourage à regarder dnrTV episode 126 avec James Kovacs.

Il démontre exactement ce que vous cherchez.

Questions connexes