Comment sont les gens code de test unitaire qui utilise Linq à SQL

Comment sont les gens du code de test unitaire qui utilise Linq à SQL?

50
demandé sur Kris Erickson 2008-09-09 23:13:59

7 réponses

Mise à jour:

Fredrik a mis un exemple de solution sur la façon de faire des applications de test unitaire linq2sql sur son blog. Vous pouvez le télécharger sur:

Http://web.archive.org/web/20120415022448/http://iridescence.no/post/DataContext-Repository-Pattern-Example-Code.aspx

Non seulement je pense que c'est génial qu'il ait posté un exemple de solution, mais il a également réussi à extraire des interfaces pour toutes les classes, ce qui rend le design plus découplé.

Mon ancien message:

* I trouvé ces blogs que je pense sont un bon début pour faire le wrapper DataContext: Link1 Link2

Ils couvrent presque le même sujet sauf que le premier implémente également des moyens d'extraction des interfaces pour les tables. Le second est plus vaste, donc je l'ai inclus aussi.*

14
répondu Presidenten 2014-02-07 16:08:31

3 ans de retard, mais c'est comme ça que je le fais:

Https://github.com/lukesampson/LinqToSQL-test-extensions/

Pas besoin d'écrire un wrapper ou faire beaucoup de plomberie, il suffit de déposer le modèle T4 à côté de votre .dbml et vous obtenez:

  1. une interface pour votre contexte de données, par exemple IExampleDataContext
  2. une simulation en mémoire pour votre contexte de données, par exemple MemoryExampleDataContext

Les deux utiliseront automatiquement les mappages que vous avez déjà configurés dans votre DBML.

Donc vous pouvez faire des choses comme

public class ProductRepo {
    IExampleDataContext DB { get; set };
    public ProductRepo(IExampleDataContext db) {
        DB = db;
    }

    public List<Product> GetProducts() {
        return DB.Products.ToList();
    }
}

Et vous pouvez l'appeler avec

new ProductRepo(new MemoryExampleDataContext()).GetProducts(); // for testing

Ou

new ProductRepo(new ExampleDataContext()).GetProducts(); // use the real DB
5
répondu Luke Sampson 2012-02-19 22:32:30

Envelopper le DataContext, puis simuler le wrapper. C'est le moyen le plus rapide de le faire, tho il nécessite un codage pour les tests, que certaines personnes pensent odeurs. Mais parfois, lorsque vous avez des dépendances qui ne peuvent pas être (facilement) moquées, c'est le seul moyen.

4
répondu Will 2008-09-09 19:56:25

Mattwar sur Le Journal Web Wayward avait un excellent article sur la façon de simuler un contexte de données Linq2Sql extensible. Vérifiez-le -- se moque de NIX-un LINQ EXTENSIBLE à SQL DATACONTEXT

3
répondu Danimal 2008-09-09 20:55:16

Linq rend les tests beaucoup plus faciles. Les requêtes Linq fonctionnent aussi bien sur les listes que sur les éléments Linq-to-sql. Vous pouvez échanger Linq en SQL pour les objets de liste et tester de cette façon.

2
répondu Mendelt 2008-09-09 19:23:26

Normalement, vous n'avez pas besoin de tester la partie du code qui utilise LINQ en SQL mais si vous le souhaitez vraiment, vous pouvez utiliser les mêmes ensembles de données que vous interrogez sur le serveur et les transformer en objets en mémoire et exécuter les requêtes LINQ contre cela (qui utiliserait les méthodes énumérables au lieu de Queryable).

Une autre option consiste à utiliser la version moquable de Matt Warren du DataContext.

Vous pouvez également obtenir les instructions SQL que LINQ to SQL utilise en obtenant les via le débogueur (à partir de L'objet IQueryable), vérifiez-les manuellement, puis incluez-les dans les tests automatisés.

1
répondu Mark Cidade 2008-10-13 03:36:33

LINQ to SQL est en fait très agréable au test unitaire car il a la capacité de créer des bases de données à la volée à partir de ce qui est défini dans votre DBML.

Il est vraiment agréable de tester une couche ORM en créant la base de données via le DataContext et en l'ayant vide pour commencer.

Je couvre sur mon blog ici: http://web.archive.org/web/20090526231317/http://www.aaron-powell.com/blog/may-2008/unit-testing-linq-to-sql.aspx

1
répondu Aaron Powell 2014-02-07 15:57:50