58 votes

Comment les gens testent-ils un code unitaire qui utilise Linq to SQL ?

Comment les gens testent-ils unitairement le code qui utilise Linq to SQL ?

14voto

Presidenten Points 1889

Mise à jour :

Fredrik a mis en ligne sur son blog un exemple de test unitaire des applications linq2sql. Vous pouvez le télécharger à l'adresse suivante :

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

Je trouve non seulement génial qu'il ait publié un exemple de solution, mais il a également réussi à extraire des interfaces pour toutes les classes, ce qui rend la conception plus découplée.

Mon ancien poste :

*J'ai trouvé ces blogs qui, selon moi, constituent un bon point de départ pour la réalisation du wrapper DataContext : Lien1 Lien2

Ils couvrent presque le même sujet, sauf que le premier met en œuvre des moyens pour extraire des interfaces pour les tables également. La seconde est plus complète, c'est pourquoi je l'ai incluse également.*

5voto

Luke Sampson Points 3359

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

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

Pas besoin d'écrire un wrapper ou de 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 copie en mémoire de votre contexte de données, par exemple MemoryExampleDataContext.

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

Vous pouvez donc 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 soit avec

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

ou

new ProductRepo(new ExampleDataContext()).GetProducts(); // use the real DB

4voto

Will Points 76760

Enveloppez le DataContext, puis simulez le wrapper. C'est le moyen le plus rapide de le faire, bien que cela nécessite de coder pour les tests, ce que certaines personnes pensent que cela sent mauvais. Mais parfois, lorsque vous avez des dépendances qui ne peuvent pas être (facilement) simulées, c'est le seul moyen.

2voto

Mendelt Points 21583

Linq rend les tests beaucoup plus faciles. Les requêtes Linq fonctionnent aussi bien sur les listes que sur les objets Linq-to-sql. Vous pouvez remplacer Linq to SQL par des objets de type liste et tester de cette façon.

2voto

Danimal Points 5721

Mattwar sur le site Le journal Web du voyageur a publié un excellent article sur la façon de créer un contexte de données Linq2Sql extensible. Consultez-le -- MOCKS NIX - UN CONTEXTE DE DONNÉES LINQ TO SQL EXTENSIBLE

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X